As the system came close to stabilizing for the first time, people other than hackers and college students began to use Linux. It built a reputation as the operating system with the fastest networking, finding use as web servers and network filesystems. The more it grew, though, the more apparent its reverse salients became.
A lot of kernel development goes into writing device drivers for specific or new hardware. Since Linux isn't a mainstream platform, companies don't find it economical to produce drivers for a market that they would make relatively little money on. This hasn't been a big problem in the past, since drivers written by the kernel development team often work better than the company-provided driver for the mainstream operating system. However, the hardware companies are sometimes reluctant to release the detailed specifications of their products necessary for creating drivers. This presents a problem, since the drivers may need to be painstakingly reverse-engineered, or cannot be made at all. As a result, Linux has at times been unable to work on certain hardware, which limits the number of computers that Linux can successfully work on. In response to this critical problem, the Linux user community has been forming advocacy groups to try to enlist the cooperation of the companies, either through shows of support for Linux or boycotts of the company. As a result, many companies have become more open with providing hardware specifications.
Humorously, some advocates have been too vocal or downright unpolite, which has necessitated a new trend of ``advocacy control'' within the Linux user community. Overzealous advocates have caused the downfall of at least one other platform, the Amiga, and Linux users are afraid the same type of thing may happen to them. On the whole, the Linux user community has proven adept at gracefully redefining the direction of technologies without insulting the companies involved.
Linux has recently been adapting a new role as a desktop operating system instead of solely a server operating system. A significant critical problem slowing its spread is the lack of an easy-to-use graphical user interface. Unix is notoriously unintuitive in its use of many obscure text commands, and Linux is no exception. Linux began to become more accessible by incorporating the XFree86 graphical display system from a non-profit company in Texas. XFree86 Inc. had been working on extending the GUI developed by Xerox and MIT onto personal computers. Even though Linux then had a graphical display, it still didn't have an interface that was simple to use. In response, the mostly-German K Desktop Environment project was started in 1997 to provide a powerful and attractive desktop that did not require its users to have special experience with Unix. Unfortunately, the project is not covered under the General Public License and might run the risk of becoming proprietary in the future. To that effect, free software developers (or rather open source developers, as they are now called), learning from experience, have already begun GNOME8 to proactively avoid that situation. The user interface problem will likely be solved by both of these projects in the near future.
Currently the most critical problem has been to gain more support from the commercial software industry. Although the kernel and the operating system have been developed completely based on the principles of free software, the programs that run on it do not necessarily need to be non-commercial as well. Migration is a difficult task, however, especially when the system people are migrating from has significant momentum in another direction. A handful of programs called emulators have been developed to help people make the transition. These allow Linux users to run some programs intended for Macintosh, DOS, or Windows computers, and they occasionally work better than they did under their native platform. Although originally just a temporary solution to this critical problem, emulation may be the preferred method of programming in the future. The Java programming language is essentially a universal language for a completely emulated platform. If it becomes successful, Linux will likely follow in its success due to its powerful emulation capabilities.