You know Lisp* is great, I know Lisp is great, so why isn’t everyone using Lisp? A long time ago people might have shied away from Lisp claiming that it is too slow to be practical, but after Java took off I think we can all see that the speed of a language is not too closely correlated with its success.
I think that Lisp basically has three problems that prevent it from becoming mainstream. One is the lack of libraries, specifically libraries that handle web functionality. I know that there are many many libraries for different implementations of Lisp, and that you can do web programming in Lisp, but there is no one standardized and accepted solution to this problem. Different libraries work under different implementations of Lisp, and provide different kinds of functionality. Compare this to languages such as Python, Ruby, and Java, which have a standard ways of handling networking and the web and you can see why developers might think that Lisp is somewhat lacking in this area.
Another major problem with Lisp is its number of dialects. In one sense having a large number of dialects is a strength because it allows innovation. However because of this it is hard to find programmers who are all proficient in a single dialect, are competent, and who want to work for your business. This makes Lisp somewhat unattractive to a company who would rather be sure of having a mediocre Java team than risk not having a Lisp team, no matter how great its potential. Also, in a project with multiple programmers dialect dependant details such as how the module system is implemented, what kind of objects you are using, ect become rather important, which is why a PLT Scheme programmer can’t simply start working in Common Lisp the next day.
Finally Lisp lacks a good IDE. Yes I know many of you favor emacs, and I won’t deny that emacs has its strengths, but for a corporate environment an IDE such as Eclipse or Visual Studio is important. Such IDEs provide graphical representations of code and package structure that allow developers to easily navigate through code created by other people. Additionally it is easy to standardize on an IDE such as these, as anyone can use them with only a few minutes of instruction, unlike emacs which only exposes its powerful features to the experienced and gifted.
Obviously I wouldn’t advocate a solution to these problems that involves trying to standardize all the dialects into one language. That has already been tried with Common Lisp, and Common Lisp failed to do away with the competing dialects, and unfortunately has become stagnant as a language, with new features being added only rarely. What we really need is a set of inter-dialect guidelines, which the community actually likes and thus will implement universally. Such guidelines would need to dictate such things as how modules are declared, if dialects are lisp-1 or lisp-2, and the C foreign function interface (to allow easy porting of libraries). Obviously such a task could be as hard or harder than the creation of Common Lisp, but it is something to think about.
*When I talk about Lisp I mean Scheme, Scheme dialects, Common Lisp, ect, not just versions of Common Lisp, which is what some people seem to think it means.