Linux

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution. The most common free software license, the GNU General Public License (GPL), GPLv3, is a form of copyleft, and is used for the Linux kernel and many of the components from the GNU Project.

Linux kernel

Linux is a monolithic kernel, supporting most features once only available in closed source kernels of non-free operating systems:

  • concurrent computing and (with the availability of enough CPU cores for tasks that are ready to run) even true parallel execution of many processes at once (each of them having one or more threads of execution);
  • configurable (at compile time) and tunable (at running time) task schedulers allowing preemptive multitasking (both in user mode and, since the 2.6 series, in kernel mode); The Completely Fair Scheduler (CFS) is the default scheduler of Linux since 2007 and it uses a red-black tree which can search, insert and delete process information (task_struct) with O(log n) time complexity, where n is the number of runnable tasks;
  • advanced memory management with paged virtual memory;
  • inter-process communications and synchronization mechanism;
  • a virtual filesystem on top of several concrete filesystems (ext4, Btrfs, XFS, JFS, FAT32, and many more);
  • configurable I/O schedulers;
  • OS-level virtualization (with Linux-VServer), paravirtualization and hardware-assisted virtualization (with KVM or Xen);
  • security mechanisms for discretionary and mandatory access control (SELinux, AppArmor, POSIX ACL’s, and others);
  • several types of layered communication protocols (including the Internet protocol suite).

GNU Compiler, toolchain

  • GNU make: an automation tool for compilation and build
  • GNU Compiler Collection (GCC): a suite of compilers for several programming languages
  • GNU C Library (glibc): core C library including headers, libraries, and dynamic loader
  • GNU Binutils: a suite of tools including linker, assembler and other tools
  • GNU Bison: a parser generator, often used with the Flex lexical analyser
  • GNU m4: an m4 macro processor
  • GNU Debugger (GDB): a code debugging tool
  • GNU build system (autotools): Autoconf, Automake and Libtool

LLVM Compiler, toolchain

  • The LLVM Core libraries provide a modern source- and target-independent optimizer, along with code generation support for many popular CPUs (as well as some less common ones!) These libraries are built around a well specified code representation known as the LLVM intermediate representation (“LLVM IR”). The LLVM Core libraries are well documented, and it is particularly easy to invent your own language (or port an existing compiler) to use LLVM as an optimizer and code generator.
  • Clang is an “LLVM native” C/C++/Objective-C compiler, which aims to deliver amazingly fast compiles, extremely useful error and warning messages and to provide a platform for building great source level tools. The Clang Static Analyzer and clang-tidy are tools that automatically find bugs in your code, and are great examples of the sort of tools that can be built using the Clang frontend as a library to parse C/C++ code.
  • The LLDB project builds on libraries provided by LLVM and Clang to provide a great native debugger. It uses the Clang ASTs and expression parser, LLVM JIT, LLVM disassembler, etc so that it provides an experience that “just works”. It is also blazing fast and much more memory efficient than GDB at loading symbols.
  • The libc++ and libc++ ABI projects provide a standard conformant and high-performance implementation of the C++ Standard Library, including full support for C++11 and C++14.
  • The compiler-rt project provides highly tuned implementations of the low-level code generator support routines like “__fixunsdfdi” and other calls generated when a target doesn’t have a short sequence of native instructions to implement a core IR operation. It also provides implementations of run-time libraries for dynamic testing tools such as AddressSanitizer, ThreadSanitizer, MemorySanitizer, and DataFlowSanitizer.
  • The MLIR subproject is a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software fragmentation, improve compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers together.
  • The OpenMP subproject provides an OpenMP runtime for use with the OpenMP implementation in Clang.
  • The polly project implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using a polyhedral model.
  • The libclc project aims to implement the OpenCL standard library.
  • The klee project implements a “symbolic virtual machine” which uses a theorem prover to try to evaluate all dynamic paths through a program in an effort to find bugs and to prove properties of functions. A major feature of klee is that it can produce a testcase in the event that it detects a bug.
  • The LLD project is a new linker. That is a drop-in replacement for system linkers and runs much faster.