Linux is a Unix clone written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX compliance. It has all the features expected in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management and TCP/IP networking. It runs mainly on 386/486/586-based PCs, using the hardware facilities of the 386-processor family to implement these features.
Ports to other architectures are underway. Linux is freely available, and no one is required to register their copies with any central authority, so it is difficult to know how many people use Linux. Several businesses are now surviving solely on selling and supporting Linux, and very few Linux users use those businesses, relatively speaking, and the Linux newsgroups are some of the most heavily read on the internet, so the number is likely in the hundreds of thousands, but hard numbers are hard to come by.
Multitasking. Several programs running at once. Multiuser. Several users on the same machine at once. Two-user licenses are not possible. Multiplatform. Runs on many different CPUs, not just Intel. Multiprocessor. SMP support is available on the Intel and SPARC platforms (with work currently in progress on other platforms), and Linux is used in several loosely-coupled MP applications, including Beowulf systems and the Fujitsu AP1000+ SPARC-based supercomputer. Memory protection between processes.
So that one program can’t bring the whole system down. Demand loads executables. Linux only reads from disk those parts of a program that are actually used. Shared copy-on-write pages among executables. This means that multiple process can use the same memory to run in. When one tries to write to that memory, that page (4KB piece of memory) is copied somewhere else. Copy-on-write has two benefits: increasing speed and decreasing memory use. Virtual memory using paging (not swapping whole processes) to disk.
To a separate partition or a file in the filesystem, or both, with the possibility of adding more swapping areas during runtime. A total of 16 of these 128 MB swapping areas can be used at once, for a theoretical total of 2 GB of useable swap space. It is simple to increase this if necessary, by changing a few lines of source code. Unified memory pool for user programs and disk cache. So that all free memory can be used for caching, and the cache can be reduced when running large programs.
Dynamically linked shared libraries (DLL’s) and static libraries. Does core dumps for post-mortem analysis. Allowing the use of a debugger on a program not only while it is running but also after it has crashed. Mostly compatible with POSIX, System V, and BSD at the source level. Mostly compatible with SCO, SVR3, and SVR4 at the binary level. Through an iBCS2-compliant emulation module. All source code is available. Including the whole kernel and all drivers, the development tools and all user programs; also, all of it is freely distributable.
Plenty of commercial programs are being provided for Linux without source, but everything that has been free, including the entire base operating system, is still free. 387-emulation in the kernel. So that programs don’t need to do their own math emulation. Every computer running Linux appears to have a math coprocessor. Of course, if your computer already contains an FPU, it will be used instead of the emulation, and you can even compile your own kernel with math emulation removed, for a small memory gain. Support for many national or customized keyboards. It is fairly easy to add new ones dynamically.