Re: And what about the proliferation of languages
"They know about data and code - and they are separate. It seems that this OO thing likes treating one equal to the other. "
Not in any implementation I've seen.
You program in C? If so you'll know what a struct is.
You define your struct. Somewhere, possibly somewhere else, you write the code that uses the struct. The code will have statements to allocate one or more blocks of struct-sized memory and pass pointers to other code that twiddles bits inside those blocks. You might accidentally pass a pointer to some other struct - shit happens. When you've finished with a block, if you remember, you'll release the block. When you compile it binary code goes into your library or program file. When the code executes and gets to the part that allocates memory for the struct that allocation takes place in the data space. As you say, separate.
Now take the OO case. You define a data structure something like a struct but in the same section of code you provide the code that operates on that data structure including code to allocate and release space for the data structure. You compile it and binary code goes into the library or program file and when you execute the statement to allocate space for an object it goes into the data space. There really isn't much difference except the terms used and the fact that it's a bit more difficult to accidentally point the wrong data structure to code.
OK there are some extra bits and pieces such as inheritance but in regard to keeping instructions and data separate any decent OO implementation will do the same thing as your preferred non-OO system.
OO is really an extension to the way we did things for years and the real problem is that its inventors had to follow the industry standard and invent an entirely new vocabulary and make it into a religion, then add a dressing of hype. It took me years to see through that and when I did I realised it was just an improved version of the familiar.