User:SwifT/Complete Handbook/What is Linux

What is Linux?
Linux is a free operating system, consisting of the Linux kernel, libraries, and utilities which allow the user to interact a computer system.

The Linux kernel is the core of the Linux operating system. It is responsible for all hardware interaction, process management, memory management, network protocol support, and file system support. There are other responsibilities owned by the kernel as well, but it is obvious that the kernel has many important responsibilities. All these tasks are handled in the background: as the core of the system, the user has no direct interaction with the kernel.

The core library on a Linux system is the GNU C library, called glibc. This library provides an interface between the Linux kernel, which operates almost independently, and the user applications. The library contains system call definitions and basic features to facilitate the application development for the Linux operating system.

The core utilities on a Linux operating system provide you, the user, with a way to interact with the system. These utilities allow users to create and manipulate files, navigate around the system, start and stop processes, etc. There is no "single" core utility package: the Linux operating system contains a dozen different packages and two Linux systems can have many different system utilities.

The most well-known and used utilities however (such as those for navigating on the system) are generally called the GNU Core Utilities (known simply as "coreutils"). GNU is a project devoted to the development of a completely free (as in 'free speech') Unix-like environment. Because GNU plays an important role on most Linux systems, many people talk about GNU/Linux.

So... what is Linux?
While the above explanation is quite technical, the Linux operating system is built upon the UNIX idea, delivering UNIX-like features and stability. But it is more than just a UNIX clone. It is developed by several thousand developers who work on the operating system in their free time (although many of them also work on Linux on a paid-for basis).

The development of Linux is decentralised: each part of the Linux operating system (kernel, libraries, tools, graphical environments, office suites, server software, ...) is developed by its own project which works independently of the other projects. Unlike what many people think, this does not mean that the projects do not work well with each other. Each software title that interacts with another uses standards. A standard is an established or widely recognized technical explanation to accomplish something. The best standards are open standards.

An open standard is a freely available and sufficiently documented technical explanation that allows any developer to write software that operates as the document dictates or supports the communication described by the standard. Therefore it can flawlessly interact with other software titles that adhere to the document as well. The document and its technical implications are free of any juridical limits (like patents, licenses, ...) and the document is accepted by a standards organisation (like ISO, ANSI, ...).

Examples of such open standards are the various network protocols (like TCP/IP, HTTP, ...), character encodings (ASCII, UTF-8, ...), etc. Because the applications use standards, interoperability amongst the various applications is guaranteed.

The Linux operating system is characterised by freedom and choice. Freedom, because the software is free (although non-free software exists for Linux as well). Choice, because you will have the choice between several applications for each action you want to perform.

Where can I find Linux?
You should not be searching for Linux sensu stricto as you'll only find the Linux kernel which you can't use without additional libraries and tools. What you need to look for is a distribution. A distribution is a project that combines the Linux kernel, libraries and tools in a coherent software package. With a distribution you can install, configure and use a Linux system easily.

Next to the distribution, you might need to install additional software. If you can not install it through your distribution (most distributions offer thousands of software titles out of the box) or you do not know any software title by name, then you can visit one of the many free software repositories around. Known repositories are Icewalkers, SourceForge, etc.

Known distributions are Fedora, Arch Linux, SuSE, Debian, Ubuntu and of course Gentoo, but many others exist as well.

History of Linux
Linus Torvalds, the creator of the Linux kernel, made a first posting about his hobby project on August 25th, 1991. People could download his code and use it, modify it and redistribute it. Linus also made a few ports available to make it possible for others to run a Linux operating system. Of course, in those days, the operating system contained only a few applications and hardware support was very limited.

In the next few years, the Linux kernel grew and expanded: support for networking, SCSI disks, specific file systems, ... was added and bugs were quickly fixed. Yet installing a Linux operating system still was difficult as there were no easy installation methods yet. That changed when the first distribution got out.

Early distributions were hardly maintained so no real good candidate was available for continuous usage. In 1993 Slackware was created, and others followed suit shortly after. Nowadays, several hundred distributions exist.

Freedom of speech
As mentioned previously, Linux is Free Software. The "Free" here should be read as "Freedom of Speech", not "Free beer". The Free Software Foundation defines the freedom as:


 * freedom to run the program for any purpose,
 * freedom to study how the program works, and to adapt it to your needs,
 * freedom to redistribute copies of the program, and
 * freedom to improve the program, and release your improvements to the public so that the entire community benefits

The Free Software Foundation has prepared and released a specific license that embraces the abovementioned freedom. Their license is called the GPL and is used by the Linux kernel and various other applications. The Free Software Model builds upon this freedom.

The role of distributions
Distributions play an important role: they bundle the free software in a coherent package. A distribution allows you to install a Linux operating system easily and maintain the software installed on your system. Thanks to distributions, you don't need to know how to build packages, what toolchains are and other packaging-related tasks.

One role of a distribution in the free software model is that of the quality analysis and marketing. Distributions take the source code of many projects and bundle it together. They test the software and provide feedback to the developers of the individual projects. When they are happy with the end result, they present their distribution to the world: it is this end result that the users will install on their system.

Development model
Most free software is developed on a volunteer basis. A free software project generally has some infrastructure at its disposal:


 * a code repository: a location where several people can work on the source code simultaneously. When you hear about CVS, SVN or Git then the topic of the discussion is most likely code repositories or the tools to manage them. A versioning tool allows developers to deal with collaborative source code development. Such tools keep track of all changes made to the project.
 * a web site, displaying news and information about the project. The web site will probably include download and installation instructions, documentation, etc.
 * a mailing list where developers and users discuss the future of the project, changes and change requests, bugs, etc.
 * a bug tracking system where users can submit bug reports and enhancement requests. Such bug tracking systems allow the developers to keep track of bugs easily.

Most free software projects are ran by volunteers. These people put their knowledge of programming, documentation writing, infrastructure, ... in the project. The motivation that drives these developers makes free software evolve quite fast: why else would someone work on a project in their free time if they weren't motivated?

Because a project is mostly ran by volunteers, there is no limit to the amount of developers that can work on the project. The Gentoo distribution has more than 230 developers, the Linux kernel has several hundred developers. Many updates to a project are made by contributors as well: people who have found and fixed an issue but are not part of the development base of the project.

The entire development process is open to the public (everyone can see how the project evolves), so there is a lot of feedback from the users. Users participate in discussions on the mailing lists or through IRC (lots of projects have a chat channel). In many cases, active users are asked to join the development team because they provide valuable feedback.

Expectations
So what can you expect from Linux?

Linux is a very stable platform that can be used in every area you can be interested in: desktop, workstation, server, programming, embedded, ... Stability is a core concern with Linux. The Linux kernel for instance is a separate entity in the operating system and not integrated in the shell or hidden from the user. Any instability of an application will cause the application to fail but not the kernel, so the system remains functional.

Because of the development model used, Linux is a fast moving operating system. With Linux you can expect frequent updates with lots of new features. You will notice that as you update your system, the system will remain recent and completely up-to-date with the latest developments. Some distributions (Gentoo included) don't even require you to upgrade your system: once installed, you will always have the latest release. Such an approach is quite unique and you can't find this in operating systems like Microsoft Windows.

Programmers will find that Linux offers them the best development platform they can imagine. An operating system where you can learn a lot from the inner workings of the system, where you can find a plethora of (free) development tools for languages such as C#, C++, Java, C, PHP, ... where communities help each other in the development of peer projects.

Home users will find Linux to be extremely interesting, with lots of documents available to help you find your way through this new and exciting system. Yes, documentation is a powerful asset: you have sites devoted to the ongoing development of good, professional and clear documents about various Linux-related subjects. Documents are not only available in English but in various languages and this international approach is also taken within the Linux software products themselves: most applications are available in several languages. You can have your entire system available in your native language!

Lots of developers are security-aware. Therefore you will find that most applications are written with a high sense of secure defaults. E-mail clients are not that likely to be easily trapped by viruses; the system only allows you to alter files you have created, leaving system-wide files intact; free updates lessen the chance that an exploitable bug remains on your system; firewalls and other security-related software are freely available and easy to install. Do not read this as if Linux is secure by default, but it does stress security more than some other operating systems.

A Linux operating system is quite cheap. Many distributions are freely available (free as in free beer), others are available for a small price compared to what they have to offer. To understand how the Free Software Model is sustainable we will discuss this in Freedom, support and finances. You are also not forced to stay with a single vendor since most applications use standards which improve interoperability.

You will find that Linux is extremely flexible. You can use Linux as a desktop, as a workstation, as a TV receiver/recorder, ... You can save disk space by installing just the applications you need without any additional stuff, you can install an entire desktop suite or just the tools you need. You can optimize your installation for your system, or use a generic installation to speed up the installation of hundreds of desktops you administer. You can choose amongst various applications that offer the same functionality but use different ways to achieve their goals. You can do whatever you want, the way you want.

... a Microsoft Windows look-a-like
Do not expect Linux to behave like Windows, to run Windows programs, to be compatible with everything Windows offers. Linux is a completely different operating system with its own way of dealing with things. It is completely different by design, by development model, by community, ... and will most likely stay different.

... secure by default
Security is a major concern with Linux, but "Secure by Default" is something completely different. You should not expect that your Linux environment will always be untouchable; security lays in the hands of whoever controls the system.

Keeping your system up to date is a prerequisite: if you do not update your system regularly, you will eventually have applications on your system that have known exploitable bugs in them. Having a clear policy is important as well: do not trust everyone on the Internet, do not use empty or easy-to-guess passwords, do not use applications from untrusted sources, etc. Know what you do on your system: badly configured services can be the weakest link in someone's security.

... an alternative
The word "alternative" is often used for a less powerful but "sufficient" solution. Linux is more powerful and different. It is not an alternative for any other operating system, but a different operating system.

Forget what you know about the operating system you currently use. Linux is different and you will need to learn it. It will take a while but it is definitely worth it.