The Linux kernel, developed by contributors worldwide, is a free and open-source, monolithic, modular (i.e., it supports the insertion and removal at runtime of loadable kernel objects), Unix-like operating system kernel, and it is highly configurable by the users who've been granted the necessary privileges. System administrators can tailor Linux for their specific targets and usage scenarios before compilation (using one of the make *config commands) and can also fine-tune kernel parameters at runtime (using the sysctl(8) interface to /proc/sys/).It is deployed on a wide variety of computing systems, such as embedded devices, mobile devices (including its use in the Android operating system), personal computers, servers, mainframes, and supercomputers.The Linux kernel was conceived and created in 1991 by Linus Torvalds for his personal computer and with no cross-platform intentions, but has since ported to a wide range of computer architectures. Notwithstanding this, the Linux kernel is highly optimized with the use of architecture specific instructions (ISA), therefore portability isn't as easy as it is with other kernels (e.g., with NetBSD, that as of 2019 supports 59 hardware platforms). Linux was soon adopted as the kernel for the GNU Operating System, which was created as an open source and free software, and based on UNIX as a by-product of the fallout of the Unix wars. Since then, it has spawned a plethora of operating system distributions, commonly also called Linux, although, formally, the term "Linux" refers only to the kernel.Day-to-day development discussions take place on the Linux kernel mailing list (LKML). Linux as a whole is released under the GNU General Public License version 2 (GPLv2), but it also contains several files under other compatible licenses and an ad hoc exemption for the user space API header files (UAPI). The Linux ABI (i.e., the Application Binary Interface which also includes Application Program Interface or API at the code source level) between the kernel and the user space has four degrees of stability (stable, testing, obsolete, removed); however, the system calls are expected to never change in order to not break the userspace programs that rely on them.Loadable kernel modules (LKMs), by design, cannot rely on a stable ABI. Therefore they must always be recompiled whenever a new kernel executable is installed in a system, otherwise they won't be loaded. In-tree drivers that are configured to become an integral part of the kernel executable (vmlinux) are statically linked by the building process. There's also no guarantee of stability of source level in-kernel API and, because of this, device drivers code, as well as the code of any other kernel subsystem, must be kept updated with kernel evolution. Fortunately, a simple rule requires that any developer who makes an API change should fix any code that breaks as the result of that change.
Powered by 654 easy search