There's nothing out there that says interoperability with Windows is a requirement. If their product is so great, it should be able to shine on it's own.
If you are trying to sell workgroup servers you have to take into account the fact that a large number of your potential clients will use Windows desktop computers. If your servers cannot offer the same functionality as Microsoft servers (without modifying all clients) you have a competitive disadvantage, no matter how good your servers are.
Original post said "LISP", not "Common Lisp", and I was responding based on my experience with Lisp, not Common Lisp. I used a Xerox Interlisp D machine to verify that ACC's implementation of XNS was compatible with Xerox's back in the '80s.
Your statement is not correct for Interlisp D either. The 1974 INTERLISP reference manual states already
Additional data types have been added, including strings, arrays, and hash association tables (hash links) (Section 7 and 10)
In the early '80s Interlisp-D had the same types, plus a "Record package", plus streams, etc., and was often used together with the LOOPS object system.
And while you could get access function definition cells with getd and putd there was no guarantee that you would get back the original definition, because the definition cell could also contain compiled code (cexprs, or more precisely something for which fntyp would return c[f]expr[*]). Of course you could write self modifying code by playing around with the function definition cell (or by using advise, which seems to make a comeback in AspectJ) but that was something that was in my experience mostly done during debugging sessions and not during normal program execution.
Wrong. Common Lisp was the first object oriented language with an ANSI standard and CLOS is still one of the most powerful object systems around.
It does not distinguish between code and data, thus it is easy to write self-modifying code.
This point is only correct in the sense that functions are first class objects in Common Lisp; a function object is represented quite differently from the S-expression that represents the defining form. See the section 3.2.2 Compilation Semantics in the Hyper Spec, especially the notes about conforming programs.
The function names don't make sense to most people who have been raised on higher-level (1980s+) languages. I mean, 'car' to grab the first element of a list, and 'cdr' to grab all the others? It can get downright confusing sometimes.
Common Lisp has first and rest as accessors for lists. Many Lispers consider it good style to use them when treating conses as lists and to use car/cdr when treating conses as binary trees.
And while you could get access function definition cells with getd and putd there was no guarantee that you would get back the original definition, because the definition cell could also contain compiled code (cexprs, or more precisely something for which fntyp would return c[f]expr[*]). Of course you could write self modifying code by playing around with the function definition cell (or by using advise, which seems to make a comeback in AspectJ) but that was something that was in my experience mostly done during debugging sessions and not during normal program execution.
Martin Seligman has done some research that seems to match the OP's description.