title: Linux kernel

text: Linux 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. It can be tailored for specific architectures and for several usage scenarios using a family of simple commands (that is, without the need of manually editing its source code before compilation); privileged users can also fine-tune kernel parameters at runtime. Most of the Linux kernel code is written using the GNU extensions of GCC to the standard C programming language and with the use of architecture-specific instructions (ISA) in limited parts of the kernel. This produces a highly optimized executable (vmlinux) with respect to utilization of memory space and task execution times.


title: Linux kernel

text: Day-to-day development discussions take place on the Linux kernel mailing list (LKML). Changes are tracked using the version control system git, which was originally authored by Torvalds as a free software replacement for BitKeeper.


title: Linux kernel

text: In April 1991, Linus Torvalds, at the time a 21-year-old computer science student at the University of Helsinki, Finland, started working on some simple ideas for an operating system inspired by UNIX, for a personal computer. He started with a task switcher in Intel 80386 assembly language and a terminal driver. On 25 August 1991, Torvalds posted the following to "comp.os.minix", a newsgroup on Usenet:


title: Linux kernel

text: On 17 September 1991, Torvalds prepared version 0.01 of Linux and put on the "ftp.funet.fi" – FTP server of the Finnish University and Research Network (FUNET). It was not even executable since its code still needed Minix for compilation and play.


title: Linux kernel

text: On 5 October 1991, Torvalds announced the first "official" version of Linux, version 0.02. At this point, Linux was able to run Bash, GCC, and some other GNU utilities:


title: Linux kernel

text: After that, despite the limited functionality of the early versions, Linux rapidly gained developers and users. Many people contributed code to the project, including some developers from the MINIX community. At the time, the GNU Project had created many of the components required for its free UNIX replacement, the GNU operating system, but its own kernel, GNU Hurd, was incomplete. For this reason, it soon adopted the Linux kernel as well. The Berkeley Software Distribution had not yet freed itself from legal encumbrances and was not competing in the space for a free OS kernel.


title: Linux kernel

text: Torvalds assigned version 0 to the kernel to indicate that it was mainly for testing and not intended for productive use. Version 0.11, released in December 1991, was the first self-hosted Linux, for it could be compiled by a computer running the same kernel.


title: Linux kernel

text: When Torvalds released version 0.12 in February 1992, he adopted the GNU General Public License version 2 (GPLv2) over his previous self-drafted license, which had not permitted commercial redistribution. In contrast to Unix, all source files of Linux are freely available, including device drivers. The initial success of Linux was driven by programmers and testers across the world. With the support of the POSIX APIs, through the libC that, whether needed, acts as an entry point to the kernel address space, Linux could run software and applications that had been developed for Unix.


title: Linux kernel

text: On 19 January 1992, the first post to the new newsgroup "alt.os.linux" was submitted. On 31 March 1992, the newsgroup was renamed "comp.os.linux". The fact that Linux is a monolithic kernel rather than a microkernel was the topic of a debate between Andrew S. Tanenbaum, the creator of MINIX, and Torvalds. The Tanenbaum–Torvalds debate started in 1992 on the Usenet group "comp.os.minix" as a general discussion about kernel architectures.


title: Linux kernel

text: Linux version 0.95 was the first to be capable of running the X Window System. In March 1994, Linux 1.0.0 was released with 176,250 lines of code. It was the first version suitable for use in production environments.


title: Linux kernel

text: It started a versioning system for the kernel with three or four numbers separated by dots where the first represented the "major" release, the second was the "minor release", and the third was the "revision." At that time odd-numbered "minor" releases were for development and tests, whilst even numbered "minor" releases were for production. The optional fourth digit indicated a set of patches to a "revision." Development releases were indicated with "-rc" ("release candidate") suffix.


title: Linux kernel

text: The current version numbering is slightly different from the above. The even vs. odd numbering has been dropped, and a specific "major" version is now indicated by the first two numbers, taken as a whole. While the time-frame is open for the development of the next "major", the -rcN suffix is used to identify the n'th "release candidate" for the next version. For example, the release of the version 4.16 was preceded by seven 4.16-rcN (from -rc1 to -rc7). Once a stable release is made, its maintenance is passed off to the "stable team". Occasional updates to stable releases are identified by a three numbering scheme (e.g., 4.13.1, 4.13.2, ..., 4.13.16).


title: Linux kernel

text: After version 1.3 of the kernel, Torvalds decided that Linux had evolved enough to warrant a new "major" number, so he released version 2.0.0 in June 1996. The series included 41 releases. The major feature of 2.0 was support for symmetric multiprocessing (SMP) and support for more types of processors.


title: Linux kernel

text: Starting with version 2.0, Linux is configurable for selecting specific hardware targets and for enabling architecture-specific features and optimizations. The "make *config" family of commands of "kbuild" are used to enable and configure thousands of options for building ad hoc kernel executables (vmlinux) and loadable modules.


title: Linux kernel

text: Version 2.2, released on 20 January 1999, improved locking granularity and SMP management, added m68k, PowerPC, Sparc64, Alpha, and other 64-bit platforms support. Furthermore, it added new file systems including Microsoft's NTFS read-only capability. In 1999, IBM published its patches to the Linux 2.2.13 code for the support of the S/390 architecture.


title: Linux kernel

text: Version 2.4.0, released on 4 January 2001, contained support for ISA Plug and Play, USB, and PC Cards. Linux 2.4 added support for the Pentium 4 and Itanium (the latter introduced the ia64 ISA that was jointly developed by Intel and Hewlett-Packard to supersede the older PA-RISC), and for the newer 64-bit MIPS processor. Development for 2.4."x" changed a bit in that more features were made available throughout the duration of the series, including support for Bluetooth, Logical Volume Manager (LVM) version 1, RAID support, InterMezzo and ext3 file systems.


title: Linux kernel

text: Version 2.6.0 was released on 17 December 2003. The development for 2.6."x" changed further towards including new features throughout the duration of the series. Among the changes that have been made in the 2.6 series are: integration of µClinux into the mainline kernel sources, PAE support, support for several new lines of CPUs, integration of Advanced Linux Sound Architecture (ALSA) into the mainline kernel sources, support for up to 2 users (up from 2), support for up to 2 process IDs (64-bit only, 32-bit arches still limited to 2), substantially increased the number of device types and the number of devices of each type, improved 64-bit support, support for file systems which support file sizes of up to 16 terabytes, in-kernel preemption, support for the Native POSIX Thread Library (NPTL), User-mode Linux integration into the mainline kernel sources, SELinux integration into the mainline kernel sources, InfiniBand support, and considerably more.


title: Linux kernel

text: Also notable are the addition of a wide selection of file systems starting with the 2.6."x" releases: now, the kernel supports a large number of file systems, some that have been designed for Linux, like ext3, ext4, FUSE, Btrfs, and others that are native of other operating systems like JFS, XFS, Minix, Xenix, Irix, Solaris, System V, Windows and MS-DOS.


title: Linux kernel

text: In 2005 the "stable team" was formed as a response to the lack of a kernel tree where people could work on bug fixes, and it would keep updating "stable" versions. In February 2008 the "linux-next" tree was created to serve as a place where patches aimed to be merged during the next development cycle gathered. Several subsystem maintainers also adopted the suffix "-next" for trees containing code which they mean to submit for inclusion in the next release cycle. , the in-development version of Linux is held in an unstable branch named "linux-next".


title: Linux kernel

text: Linux used to be maintained without the help of an automated source code management system until, in 2002, development switched to BitKeeper. It was freely available for Linux developers but it was not free software. In 2005, because of efforts to reverse-engineer it, the company which owned the software revoked its support of the Linux community. In response, Torvalds and others wrote Git. The new system was written within weeks, and in two months the first official kernel made using it was released.


title: Linux kernel

text: Details on the history of the 2.6 kernel series can be found in the ChangeLog files on the 2.6 kernel series source code release area of kernel.org.


title: Linux kernel

text: The 20th anniversary of Linux was celebrated by Torvalds in July 2011 with the release of the 3.0.0 kernel version. As 2.6 had been the version number for 8 years, a new "uname26" personality that reports 3.x as 2.6.40+x had to be added to the kernel so that old programs would work.


title: Linux kernel

text: Version 3.0 was released on 22 July 2011. On 30 May 2011, Torvalds announced that the big change was "NOTHING. Absolutely nothing." and asked, "...let's make sure we really make the next release not just an all new shiny number, but a good kernel too." After the expected 6–7 weeks of the development process, it would be released near the 20th anniversary of Linux.


title: Linux kernel

text: On 11 December 2012, Torvalds decided to reduce kernel complexity by removing support for i386 processors, making the 3.7 kernel series the last one still supporting the original processor. The same series unified support for the ARM processor.


title: Linux kernel

text: Version 3.11, released on 2 September 2013, adds many new features such as new flag for to reduce temporary file vulnerabilities, experimental AMD Radeon dynamic power management, low-latency network polling, and zswap (compressed swap cache).


title: Linux kernel

text: The numbering change from 2.6.39 to 3.0, and from 3.19 to 4.0, involved no meaningful technical differentiation. The major version number was increased to avoid large minor numbers. Stable 3.x.y kernels were released until 3.19 in February 2015.


title: Linux kernel

text: In April 2015, Torvalds released kernel version 4.0. By February 2015, Linux had received contributions from nearly 12,000 programmers from more than 1,200 companies, including some of the world's largest software and hardware vendors. Version 4.1 of Linux, released in June 2015, contains over 19.5 million lines of code contributed by almost 14,000 programmers.


title: Linux kernel

text: A total of 1,991 developers, of whom 334 were first-time collaborators, added more than 553,000 lines of code to version 5.8, breaking the record previously held by version 4.9.


title: Linux kernel

text: According to the Stack Overflow's annual Developer Survey of 2019, more than the 53% of all respondents have developed software for Linux and about 27% for Android, although only about 25% develop with Linux-based operating systems.


title: Linux kernel

text: Most websites run on Linux-based operating systems, and all of the world's 500 most powerful supercomputers use some kind of OS based on Linux.


title: Linux kernel

text: Linux distributions bundle the kernel with system software (e.g., the GNU C Library, systemd, and others Unix utilities and daemons) and a wide selection of application software, but their usage share in desktops is low in comparison to other operating systems.


title: Linux kernel

text: Android, which accounts for the majority of the installed base of all operating systems for mobile devices, is responsible for the rising usage of the Linux kernel, together with its wide use in a large variety of embedded devices.


title: Linux kernel

text: Linux is a monolithic kernel with a modular design (e.g., it can insert and remove loadable kernel modules at runtime), supporting most features once only available in closed source kernels of non-free operating systems. The rest of the article makes use of the UNIX and Unix-like operating systems convention on the official manual pages. The numbers that follow the name of commands, interfaces, and other features, have the purpose of specifying the section (i.e., the type of the OS' component or feature) they belong to (e.g., refers to a system call, while refers to a userspace library wrapper). The following list and the subsequent sections describe a non-comprehensive overview of Linux architectural design and of some of its noteworthy features.


title: Linux kernel

text: Most Device drivers and kernel extensions run in kernel space (ring 0 in many CPU architectures), with full access to the hardware. Some exceptions run in user space; notable examples are filesystems based on FUSE/CUSE, and parts of UIO. Furthermore, the X Window System and Wayland, the windowing system and display server protocols that most people use with Linux, do not run within the kernel. Differently, the actual interfacing with GPUs of graphics cards is an in-kernel subsystem called Direct Rendering Manager (DRM).


title: Linux kernel

text: Unlike standard monolithic kernels, device drivers are easily configured as modules, and loaded or unloaded while the system is running and can also be pre-empted under certain conditions in order to handle hardware interrupts correctly and to better support symmetric multiprocessing. By choice, Linux has no stable device driver application binary interface.


title: Linux kernel

text: Linux typically makes use of memory protection and virtual memory and can also handle non-uniform memory access, however the project has absorbed μClinux which also makes it possible to run Linux on microcontrollers without virtual memory.


title: Linux kernel

text: The hardware is represented in the file hierarchy. User applications interact with device drivers via entries in the or directories. Processes information as well are mapped to the file system through the directory.


title: Linux kernel

text: Linux is a clone of UNIX, and aims toward POSIX and Single UNIX Specification compliance. The kernel also provides system calls and other interfaces that are Linux-specific. In order to be included in the official kernel, the code must comply with a set of licensing rules.


title: Linux kernel

text: The Linux Application binary interface (ABI) 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.


title: Linux kernel

text: 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 will not 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.


title: Linux kernel

text: There is 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. Any developer who makes an API change is required to fix any code that breaks as the result of their change.


title: Linux kernel

text: The set of the Linux kernel API that regards the interfaces exposed to user applications is fundamentally composed of UNIX and Linux-specific system calls. A system call is an entry point into the Linux kernel. For example, among the Linux-specific ones there is the family of the system calls. Most extensions must be enabled by defining the codice_1 macro in a header file or when the user-land code is being compiled.


title: Linux kernel

text: System calls can only be invoked by using assembly instructions which enable the transition from unprivileged user space to privileged kernel space in ring 0. For this reason, the C standard library (libC) acts as a wrapper to most Linux system calls, by exposing C functions that, only whether it is needed, can transparently enter into the kernel which will execute on behalf of the calling process. For those system calls not exposed by libC, e.g. the "fast userspace mutex" (futex), the library provides a function called which can be used to explicitly invoke them.


title: Linux kernel

text: Pseudo filesystems (e.g., the sysfs and procfs filesystems) and special files (e.g., codice_2, codice_3, codice_4, and many others) constitute another layer of interface to kernel data structures representing hardware or logical (software) devices.


title: Linux kernel

text: Because of the differences existing between the hundreds of various implementations of the Linux OS, executable objects, even though they are compiled, assembled, and linked for running on a specific hardware architecture (that is, they use the ISA of the target hardware), often cannot run on different Linux Distributions. This issue is mainly due to distribution-specific configurations and a set of patches applied to the code of the Linux kernel, differences in system libraries, services (daemons), filesystem hierarchies, and environment variables.


title: Linux kernel

text: The main standard concerning application and binary compatibility of Linux distributions is the Linux Standard Base (LSB). However, the LSB goes beyond what concerns the Linux kernel, because it also defines the desktop specifications, the X libraries and Qt that have little to do with it. The LSB version 5 is built upon several standards and drafts (POSIX, SUS, X/Open, File System Hierarchy (FHS), and others).


title: Linux kernel

text: The parts of the LSB largely relevant to the kernel are the "General ABI" (gABI), especially the System V ABI and the Executable and Linking Format (ELF), and the "Processor Specific ABI" (psABI), for example the "Core Specification for X86-64."


title: Linux kernel

text: The standard ABI for how x86_64 user programs invoke system calls is to load the syscall number into the "rax" register, and the other parameters into "rdi", "rsi", "rdx", "r10", "r8", and "r9", and finally to put the "syscall" assembly instruction in the code.


title: Linux kernel

text: There are several kernel internal APIs utilized between the different subsystems. Some are available only within the kernel subsystems, while a somewhat limited set of in-kernel symbols (i.e., variables, data structures, and functions) is exposed also to dynamically loadable modules (e.g., device drivers loaded on demand) whether they're exported with the and macros (the latter reserved to modules released under a GPL-compatible license).


title: Linux kernel

text: Linux provides in-kernel APIs that manipulate data structures (e.g., linked lists, radix trees, red-black trees, queues) or perform common routines (e.g., copy data from and to user space, allocate memory, print lines to the system log, and so on) that have remained stable at least since Linux version 2.6.


title: Linux kernel

text: The Linux developers chose not to maintain a stable in-kernel ABI. Modules compiled for a specific version of the kernel cannot be loaded into another version without being recompiled, assuming that the in-kernel API has remained the same at the source level; otherwise, the module code must also be modified accordingly.


title: Linux kernel

text: Linux creates processes by means of the or by the newer system calls. Depending on the given parameters, the new entity can share most or none of the resources of the caller. These syscalls can create new entities ranging from new independent processes (each having a special identifier called "TGID" within the "task_struct" data structure in kernel space, although that same identifier is called "PID" in userspace), to new threads of execution within the calling process (by using the parameter). In this latter case the new entity owns the same "TGID" of the calling process and consequently has also the same "PID" in userspace.


title: Linux kernel

text: If the executable is dynamically linked to shared libraries, a dynamic linker (for ELF objects, it is typically ) is used to find and load the needed objects, prepare the program to run and then run it.


title: Linux kernel

text: The Native POSIX Thread Library, simply known as the NPTL, provides the standard POSIX threads interface ("pthreads") to userspace. Whenever a new thread is created using the pthread_create(3) POSIX interface, the family of system calls must also be given the address of the function that the new thread must jump to. The Linux kernel provides the (acronym for "Fast user-space mutexes") mechanisms for fast user-space locking and synchronization; the majority of the operations are performed in userspace but it may be necessary to communicate with the kernel using the system call.


title: Linux kernel

text: A very special category of threads is the so-called "kernel threads". They must not be confused with the above-mentioned threads of execution of the user's processes. Kernel threads exist only in kernel space and their only purpose is to concurrently run kernel tasks.


title: Linux kernel

text: Differently, whenever an independent process is created, the syscalls return exactly to the next instruction of the same program, concurrently in "parent" process and in "child's" one (i.e., one program, two processes). Different return values (one per process) enable the program to know in which of the two processes it is currently executing. Programs need this information because the child process, a few steps after process duplication, usually invokes the system call (possibly via the family of wrapper functions in glibC) and replace the program that is currently being run by the calling process with a new program, with newly initialized stack, heap, and (initialized and uninitialized) data segments. When it is done, it results in two processes that run two different programs.


title: Linux kernel

text: Depending on the effective user id ("euid"), and on the effective group id ("egid"), a process running with user zero privileges ("root", the system administrator, owns the identifier 0) can perform everything (e.g., kill all the other processes or recursively wipe out whole filesystems), instead non zero user processes cannot. divides the privileges traditionally associated with superuser into distinct units, which can be independently enabled and disabled by the parent process or dropped by the child itself.


title: Linux kernel

text: The Linux scheduler is modular, in the sense that it enables different scheduling classes and policies. Scheduler classes are plugable scheduler algorithms that can be registered with the base scheduler code. Each class schedules different types of processes. The core code of the scheduler iterates over each class in order of priority and chooses the highest priority scheduler that has a schedulable entity of type struct sched_entity ready to run. Entities may be threads, group of threads, and even all the processes of a specific user.


title: Linux kernel

text: Linux provides both "user preemption" as well as full "kernel preemption". Preemption reduces latency, increases responsiveness, and makes Linux more suitable for desktop and real-time applications.


title: Linux kernel

text: For normal tasks, by default, the kernel uses the Completely Fair Scheduler (CFS) class, introduced in the 2.6.23 version of the kernel. Internally this default-scheduler class is defined in a macro of a C header as codice_5. In other POSIX kernels, a similar policy known as codice_6 allocates CPU timeslices (i.e, it assigns absolute slices of the processor time depending on either predetermined or dynamically computed priority of each process). The Linux CFS does away with absolute timeslices and assigns a fair proportion of CPU time, as a function of parameters like the total number of runnable processes and the time they have already run; this function also takes into account a kind of weight that depends on their relative priorities (nice values).


title: Linux kernel

text: With user preemption, the kernel scheduler can replace the current process with the execution of a context switch to a different one that therefore acquires the computing resources for running (CPU, memory, and more). It makes it according to the CFS algorithm (in particular, it uses a variable called for sorting entities and then chooses the one that has the smaller vruntime, - i.e., the schedulable entity that has had the least share of CPU time), to the active scheduler policy and to the relative priorities. With kernel preemption, the kernel can preempt itself when an interrupt handler returns, when kernel tasks block, and whenever a subsystem explicitly calls the schedule() function.


title: Linux kernel

text: The kernel also contains two POSIX-compliant real-time scheduling classes named codice_7 (realtime first-in-first-out) and codice_8 (realtime round-robin), both of which take precedence over the default class. An additional scheduling policy known as codice_9, implementing the earliest deadline first algorithm (EDF), was added in kernel version 3.14, released on 30 March 2014. codice_10 takes precedence over all the other scheduling classes.


title: Linux kernel

text: Real-time codice_11 patches, included into the mainline Linux since version 2.6, provide a deterministic scheduler, the removal of preemption and interrupts disabling (where possible), PI Mutexes (i.e., locking primitives that avoid priority inversion), support for high precision event timers (HPET), preemptive Read-copy-update, (forced) IRQ threads, and other minor features.


title: Linux kernel

text: The kernel has different causes of concurrency (e.g., interrupts, bottom halves, preemption of kernel and users tasks, symmetrical multiprocessing). For protecting critical regions (sections of code that must be executed atomically), shared memory locations (like global variables and other data structures with global scope), and regions of memory that are asynchronously modifiable by hardware (e.g., having the C codice_12 type qualifier), Linux provides a large set of tools. They consist of atomic types (which can only be manipulated by a set of specific operators), spinlocks, semaphores, mutexes, and lockless algorithms (e.g., RCUs). Most lock-less algorithms are built on top of memory barriers for the purpose of enforcing memory ordering and prevent undesired side effects due to compiler optimization.


title: Linux kernel

text: codice_11 code included in mainline Linux provide "RT-mutexes", a special kind of Mutex which do not disable preemption and have support for priority inheritance. Almost all locks are changed into sleeping locks when using configuration for realtime operation. Priority inheritance avoids priority inversion by granting a low-priority task which holds a contended lock the priority of a higher-priority waiter until that lock is released.


title: Linux kernel

text: The management of the interrupts, although it could be seen as a single job, is divided in two separate parts. This split in two is due to the different time constraints and to the synchronization needs of the tasks whose the management is composed of. The first part is made up of an asynchronous interrupt service routine that in Linux is known as the "top half", while the second part is carried out by one of three types of the so-called "bottom halves" ("softirq", "tasklets," and "work queues"). Linux interrupts service routines can be nested (i.e., a new IRQ can trap into a high priority ISR that preempts any other lower priority ISRs).


title: Linux kernel

text: Memory management in Linux is a complex topic. First of all, the kernel is not pageable (i.e., it is always resident in physical memory and cannot be swapped to the disk). In the kernel there is no memory protection (no "SIGSEGV" signals, unlike in userspace), therefore memory violations lead to instability and system crashes.


title: Linux kernel

text: Linux implements virtual memory with 4 and 5-levels page tables. As said, only user memory space is always pageable. It maintains information about each page frame of RAM in apposite data structures (of type ) that are populated immediately after boots and that are kept until shutdown, regardless of them being or not associated with virtual pages. Furthermore, it classifies all page frames in zones, according to their architecture dependent constraints and intended use. For example, pages reserved for DMA operations are in ZONE_DMA, pages that are not permanently mapped to virtual addresses are in ZONE_HIGHMEM (in x86_32 architecture this zone is for physical addresses above 896 MB, while x86_64 does not need it because x86_64 can permanently map physical pages that reside in higher addresses), and all that remains (with the exception of other less used classifications) is in ZONE_NORMAL.


title: Linux kernel

text: Small chunks of memory can be dynamically allocated via the family of codice_14 API and freed with the appropriate variant of codice_15. codice_16 and codice_17 are used for large virtually contiguous chunks. alloc_pages() allocates the desired number of entire pages.


title: Linux kernel

text: Kernel includes SLAB, SLUB and SLOB allocators as configurable alternatives. SLUB is the newest and it is also the default allocator. It aims for simplicity and efficiency. SLUB has been made codice_11 compatible.


title: Linux kernel

text: While not originally designed to be portable, Linux is now one of the most widely ported operating system kernels, running on a diverse range of systems from the ARM architecture to IBM z/Architecture mainframe computers. The first port was performed on the Motorola 68000 platform. The modifications to the kernel were so fundamental that Torvalds viewed the Motorola version as a fork and a "Linux-like operating system". However, that moved Torvalds to lead a major restructure of the code to facilitate porting to more computing architectures. The first Linux that, in a single source tree, had code for more than i386 alone, supported the DEC Alpha AXP 64-bit platform.


title: Linux kernel

text: Linux runs as the main operating system on IBM's Summit; , all of the world's 500 fastest supercomputers run some operating system based on the Linux kernel, a big change from 1998 when the first Linux supercomputer got added to the list.


title: Linux kernel

text: In 2007, the LKDDb project has been started to build a comprehensive database of hardware and protocols known by Linux kernels. The database is built automatically by static analysis of the kernel sources. Later in 2014, the Linux Hardware project was launched to automatically collect a database of all tested hardware configurations with the help of users of various Linux distributions.


title: Linux kernel

text: Rebootless updates can even be applied to the kernel by using live patching technologies such as Ksplice, kpatch and kGraft. Minimalistic foundations for live kernel patching were merged into the Linux kernel mainline in kernel version 4.0, which was released on 12 April 2015. Those foundations, known as "livepatch" and based primarily on the kernel's ftrace functionality, form a common core capable of supporting hot patching by both kGraft and kpatch, by providing an application programming interface (API) for kernel modules that contain hot patches and an application binary interface (ABI) for the userspace management utilities. However, the common core included into Linux kernel 4.0 supports only the x86 architecture and does not provide any mechanisms for ensuring function-level consistency while the hot patches are applied. , there is ongoing work on porting kpatch and kGraft to the common live patching core provided by the Linux kernel mainline.


title: Linux kernel

text: Kernel bugs present potential security issues. For example, they may allow for privilege escalation or create denial-of-service attack vectors. Over the years, numerous bugs affecting system security were found and fixed. New features are frequently implemented to improve the kernel's security.


title: Linux kernel

text: Capabilities(7) have already been introduced in the section about the processes and threads. Android makes use of them and systemd gives administrators detailed control over the capabilities of processes.


title: Linux kernel

text: Linux offers a wealth of mechanisms to reduce kernel attack surface and improve security which are collectively known as the Linux Security Modules (LSM). They comprise the Security-Enhanced Linux (SELinux) module, whose code has been originally developed and then released to the public by the NSA, and AppArmor among others. SELinux is now actively developed and maintained on GitHub. SELinux and AppArmor provide support to access control security policies, including mandatory access control (MAC), though they profoundly differ in complexity and scope.


title: Linux kernel

text: Another security feature is the Seccomp BPF (SECure COMPuting with Berkeley Packet Filters) which works by filtering parameters and reducing the set of system calls available to user-land applications.


title: Linux kernel

text: Critics have accused kernel developers of covering up security flaws, or at least not announcing them; in 2008, Linus Torvalds responded to this with the following:


title: Linux kernel

text: Linux distributions typically release security updates to fix vulnerabilities in the Linux kernel. Many offer long-term support releases that receive security updates for a certain Linux kernel version for an extended period of time.


title: Linux kernel

text: The community of Linux kernel developers comprises about 5000–6000 members. According to the "2017 State of Linux Kernel Development", a study issued by the Linux Foundation, covering the commits for the releases 4.8 to 4.13, about 1500 developers were contributing from about 200-250 companies on average. The top 30 developers contributed a little more than 16% of the code. For companies, the top contributors are Intel (13.1%) and Red Hat (7.2%), Linaro (5.6%), IBM (4.1%), the second and fifth places are held by the 'none' (8.2%) and 'unknown' (4.1%) categories.


title: Linux kernel

text: As with many large open-source software projects, developers are required to adhere to the Contributor Covenant, a code of conduct intended to address harassment of minority contributors. Additionally, to prevent offense the use of inclusive terminology within the source code is mandated.


title: Linux kernel

text: The Linux development community uses Git to manage the source code. Git users clone the latest version of Torvalds' tree with and keep it up to date using . Contributions are submitted as patches, in the form of text messages on the LKML (and often also on other mailing lists dedicated to particular subsystems). The patches must conform to a set of rules and to a formal language that, among other things, describes which lines of code are to be deleted and what others are to be added to the specified files. These patches can be automatically processed so that system administrators can apply them in order to make just some changes to the code or to incrementally upgrade to the next version. Linux is distributed also in GNU zip (gzip) and bzip2 formats.


title: Linux kernel

text: A developer who wants to change the Linux kernel starts with developing and testing that change. Depending on how significant the change is and how many subsystems it modifies, the change will either be submitted as a single patch or in multiple patches of source code. In case of a single subsystem that is maintained by a single maintainer, these patches are sent as e-mails to the maintainer of the subsystem with the appropriate mailing list in Cc. The maintainer and the readers of the mailing list will review the patches and provide feedback. Once the review process has finished the subsystem maintainer accepts the patches in the relevant Git kernel tree. If the changes to the Linux kernel are bug fixes that are considered important enough, a pull request for the patches will be sent to Torvalds within a few days. Otherwise, a pull request will be sent to Torvalds during the next merge window. The merge window usually lasts two weeks and starts immediately after the release of the previous kernel version. The Git kernel source tree names all developers who have contributed to the Linux kernel in the "Credits" directory and all subsystem maintainers are listed in "Maintainers".


title: Linux kernel

text: Linux is written in a special C programming language supported by GCC, a compiler that extends in many ways the C standard, for example using inline sections of code written in the assembly language (in GCC's "AT&T-style" syntax) of the target architecture. Since 2002 all the code must adhere to the 21 rules comprising the "Linux Kernel Coding Style."


title: Linux kernel

text: The GNU Compiler Collection (GCC or GNU cc) is the default compiler for the mainline Linux sources and it is invoked by a utility called make. Then, the GNU Assembler (more often called GAS or GNU as) outputs the object files from the GCC generated assembly code. Finally, the GNU Linker (GNU ld) is used to produce a statically linked executable kernel file called . Both and are part of GNU Binary Utilities (binutils). The above-mentioned tools are collectively known as the GNU toolchain.


title: Linux kernel

text: GCC was for a long time the only compiler capable of correctly building Linux. In 2004, Intel claimed to have modified the kernel so that its C compiler was also capable of compiling it. There was another such reported success in 2009, with a modified 2.6.22 version.


title: Linux kernel

text: Since 2010, effort has been underway to build Linux with Clang, an alternative compiler for the C language; as of 12 April 2014, the official kernel could almost be compiled by Clang. The project dedicated to this effort is named "LLVMLinux" after the LLVM compiler infrastructure upon which Clang is built. LLVMLinux does not aim to fork either Linux or the LLVM, therefore it is a meta-project composed of patches that are eventually submitted to the upstream projects. By enabling Linux to be compiled by Clang, developers may benefit from shorter compilation times.


title: Linux kernel

text: In 2017, developers completed upstreaming patches to support building the Linux kernel with Clang in the 4.15 release, having backported support for X86-64 and AArch64 to the 4.4, 4.9, and 4.14 branches of the stable kernel tree. Google's Pixel 2 shipped with the first Clang built Linux kernel, though patches for Pixel (1st generation) did exist. 2018 saw ChromeOS move to building kernels with Clang by default, while Android (operating system) made Clang and LLVM's linker LLD required for kernel builds in 2019. Google moved its production kernel used throughout its datacenters to being built with Clang in 2020. Today, the "ClangBuiltLinux" group coordinates fixes to both Linux and LLVM to ensure compatibility, both composed of members from "LLVMLinux" and having upstreamed patches from "LLVMLinux".


title: Linux kernel

text: Bugs involving the Linux Kernel can be difficult to troubleshoot. This is because of the kernel's interaction with userspace and hardware; and also because they might be caused from a wider range of reasons compared to those of user programs. A few examples of the underlying causes are semantic errors in code, misuse of synchronization primitives, and incorrect hardware management.


title: Linux kernel

text: A report of a non-fatal bug in the kernel is called an "oops"; such deviations from correct behavior of the Linux kernel may allow continued operation with compromised reliability.


title: Linux kernel

text: A critical and fatal error is reported via the function. It prints a message and then halts the kernel.


title: Linux kernel

text: One of the most common techniques used to find out bugs in code is "debugging by printing". For this purpose Linux provides an in-kernel API called which stores messages in a circular buffer. The system call is used for reading and/or clearing the kernel message ring buffer and for setting the maximum "log level" of the messages to be sent to the console (i.e., one of the eight parameters of , which tell the severity of the condition reported); usually it is invoked via the glibC wrapper . Kernel messages are also exported to userland through the "/dev/kmsg" interface (e.g., systemd-journald reads that interface and by default append the messages to ).


title: Linux kernel

text: Another fundamental technique for debugging a running kernel is tracing. The "ftrace" mechanism is a Linux internal tracer; it is used for monitoring and debugging Linux at runtime and it can also analyze user space latencies due to kernel misbehavior. Furthermore, "ftrace" allows users to trace Linux at boot-time.


title: Linux kernel

text: "kprobes" and "kretprobes" can break (like debuggers in userspace) into Linux and non-disruptively collect information. "kprobes" can be inserted into code at (almost) any address, while kretprobes work at function return. "uprobes" have similar purposes but they also have some differences in usage and implementation.


title: Linux kernel

text: With KGDB Linux can be debugged in much the same way as userspace programs. KGDB requires an additional machine that runs GDB and that is connected to the target to be debugged using a serial cable or Ethernet.


title: Linux kernel

text: The Linux kernel project integrates new code on a rolling basis. Software checked into the project must work and compile without error. Each kernel subsystem is assigned a maintainer who is responsible for reviewing patches against the kernel code standards and keeps a queue of patches that can be submitted to Linus Torvalds within a merge window of several weeks. Patches are merged by Torvalds into the source code of the prior stable Linux kernel release, creating the "-rc" release candidate for the next stable kernel. Once the merge window is closed only fixes to the new code in the development release are accepted. The "-rc" development release of the kernel goes through regression tests and once it is judged to be stable by Torvalds and the kernel subsystem maintainers a new Linux kernel is released and the development process starts all over again.


title: Linux kernel

text: Developers who feel treated unfairly can report this to the Linux Foundation's Technical Advisory Board. In July 2013, the maintainer of the USB 3.0 driver Sage Sharp asked Torvalds to address the abusive commentary in the kernel development community. In 2014, Sharp backed out of Linux kernel development, saying that "The focus on technical excellence, in combination with overloaded maintainers, and people with different cultural and social norms, means that Linux kernel maintainers are often blunt, rude, or brutal to get their job done". At the linux.conf.au (LCA) conference in 2018, developers expressed the view that the culture of the community has gotten much better in the past few years. Daniel Vetter, the maintainer of the Intel drm/i915 graphics kernel driver, commented that the "rather violent language and discussion" in the kernel community has decreased or disappeared.


title: Linux kernel

text: Laurent Pinchart asked developers for feedback on their experience with the kernel community at the 2017 Embedded Linux Conference Europe. The issues brought up were discussed a few days later at the Maintainers Summit. Concerns over the lack of consistency in how maintainers responded to patches submitted by developers were echoed by Shuah Khan, the maintainer of the kernel self-test framework. Torvalds contended that there would never be consistency in the handling of patches because different kernel subsystems have, over time, adopted different development processes. Therefore, it was agreed upon that each kernel subsystem maintainer would document the rules for patch acceptance.


title: Linux kernel

text: The Git tree of Linus Torvalds that contains the Linux kernel is referred to as mainline Linux. Every stable kernel release originates from the mainline tree, and is frequently published on kernel.org. Mainline Linux has only solid support for a small subset of the many devices that run Linux. Non-mainline support is provided by independent projects, such as Yocto or Linaro, but in many cases the kernel from the device vendor is needed. Using a vendor kernel likely requires a board support package.


title: Linux kernel

text: "Mainlining" refers to the effort of adding support for a device to the mainline kernel, while there was formerly only support in a fork or no support at all. This usually includes adding drivers or device tree files. When this is finished, the feature or security fix is considered "mainlined".


title: Linux kernel

text: The maintainer of the stable branch, Greg Kroah-Hartman, has applied the term "Linux-like" to downstream kernel forks by vendors that add millions of lines of code to the mainline kernel. In 2019, Google stated that they wanted to use the mainline Linux kernel in Android so the number of kernel forks would be reduced. The term Linux-like has also been applied to the Embeddable Linux Kernel Subset, which does not include the full mainline Linux kernel but a small modified subset of the code.


title: Linux kernel

text: There are certain communities that develop kernels based on the official Linux. Some interesting bits of code from these forks that include Linux-libre, Compute Node Linux, INK, L4Linux, RTLinux, and User-Mode Linux (UML) have been merged into the mainline. Some operating systems developed for mobile phones initially used heavily modified versions of Linux, including Google Android, Firefox OS, HP webOS, Nokia Maemo and Jolla Sailfish OS. In 2010, the Linux community criticised Google for effectively starting its own kernel tree:


title: Linux kernel

text: Today Android uses a customized Linux where major changes are implemented in device drivers, but some changes to the core kernel code is required. Android developers also submit patches to the official Linux that finally can boot the Android operating system. For example, a Nexus 7 can boot and run the mainline Linux.


title: Linux kernel

text: At a 2001 presentation at the Computer History Museum, Linus Torvalds had this to say in response to a question about distributions of Linux using precisely the same kernel sources or not:


title: Linux kernel

text: There have been several notable conflicts among Linux kernel developers. Examples of such conflicts are:


title: Linux kernel

text: Prominent Linux kernel developers have been aware of the importance of avoiding conflicts between developers. For a long time there was no code of conduct for kernel developers due to opposition by Linus Torvalds. However, a Linux Kernel "Code of Conflict" was introduced on 8 March 2015. It was replaced on 16 September 2018 by a new "Code of Conduct" based on the Contributor Covenant. This coincided with a public apology by Torvalds and a brief break from kernel development. On 30 November 2018, complying with the "Code of Conduct", Jarkko Sakkinen of Intel sent out patches replacing instances of "fuck" appearing in source code comments with suitable versions focused on the word 'hug'.


title: Linux kernel

text: , the 5.11 release of the Linux kernel had around 30.34 million lines of code. Roughly 14% of the code is part of the "core" (arch, kernel and mm directories), while 60% is drivers.


title: Linux kernel

text: The cost to redevelop version 2.6.0 of the Linux kernel in a traditional proprietary development setting has been estimated to be US$612 million (€467M, £394M) in 2004 prices using the COCOMO person-month estimation model. In 2006, a study funded by the European Union put the redevelopment cost of kernel version 2.6.8 higher, at €882M ($1.14bn, £744M).


title: Linux kernel

text: This topic was revisited in October 2008 by Amanda McPherson, Brian Proffitt, and Ron Hale-Evans. Using David A. Wheeler's methodology, they estimated redevelopment of the 2.6.25 kernel now costs $1.3bn (part of a total $10.8bn to redevelop Fedora 9). Again, Garcia-Garcia and Alonso de Magdaleno from University of Oviedo (Spain) estimate that the value annually added to kernel was about €100M between 2005 and 2007 and €225M in 2008, it would cost also more than €1bn (about $1.4bn as of February 2010) to develop in the European Union.


title: Linux kernel

text: , using then-current LOC (lines of code) of a 2.6.x Linux kernel and wage numbers with David A. Wheeler's calculations it would cost approximately $3bn (about €2.2bn) to redevelop the Linux kernel as it keeps getting bigger. An updated calculation , using then-current 20,088,609 LOC (lines of code) for the 4.14.14 Linux kernel and the current US national average programmer salary of $75,506 show it would cost approximately $14,725,449,000 dollars (£11,191,341,000) to rewrite the existing code.


title: Linux kernel

text: The latest kernel version and older kernel versions are maintained separately. Most latest kernel releases were supervised by Linus Torvalds.


title: Linux kernel

text: The Linux kernel developer community maintains a stable kernel by applying fixes for software bugs that have been discovered during the development of the subsequent stable kernel. Therefore, www.kernel.org will always list two stable kernels. The next stable Linux kernel is now released only 8 to 12 weeks later. Therefore, the Linux kernel maintainers have designated some stable kernel releases as "longterm", these long-term support Linux kernels are updated with bug fixes for two or more years. , there are six longterm Linux kernels: 5.15.23, 5.10.100, 5.4.179, 4.19.229, 4.14.266, and 4.9.301. The full list of releases is at Linux kernel version history.


title: Linux kernel

text: Most Linux users run a kernel supplied by their Linux distribution. Some distributions ship the "vanilla" or "stable" kernels. However, several Linux distribution vendors (such as Red Hat and Debian) maintain another set of Linux kernel branches which are integrated into their products. These are usually updated at a slower pace compared to the "vanilla" branch, and they usually include all fixes from the relevant "stable" branch, but at the same time they can also add support for drivers or features which had not been released in the "vanilla" version the distribution vendor started basing their branch from.


title: Linux kernel

text: Initially, Torvalds released Linux under a license which forbade any commercial use. This was changed in version 0.12 by a switch to the GNU General Public License version 2 (GPLv2). This license allows distribution and sale of possibly modified and unmodified versions of Linux but requires that all those copies be released under the same license and be accompanied by - or that, on request, free access is given to - the complete corresponding source code. Torvalds has described licensing Linux under the GPLv2 as the "best thing I ever did".


title: Linux kernel

text: The Linux kernel is licensed explicitly under GNU General Public License version 2 only (GPL-2.0-only) with an explicit syscall exception (Linux-syscall-note), without offering the licensee the option to choose any later version, which is a common GPL extension. Contributed code must be available under GPL-compatible license.


title: Linux kernel

text: There was considerable debate about how easily the license could be changed to use later GPL versions (including version 3), and whether this change is even desirable. Torvalds himself specifically indicated upon the release of version 2.4.0 that his own code is released only under version 2. However, the terms of the GPL state that if no version is specified, then any version may be used, and Alan Cox pointed out that very few other Linux contributors had specified a particular version of the GPL.


title: Linux kernel

text: In September 2006, a survey of 29 key kernel programmers indicated that 28 preferred GPLv2 to the then-current GPLv3 draft. Torvalds commented, "I think a number of outsiders... believed that I personally was just the odd man out because I've been so publicly not a huge fan of the GPLv3." This group of high-profile kernel developers, including Torvalds, Greg Kroah-Hartman and Andrew Morton, commented on mass media about their objections to the GPLv3. They referred to clauses regarding DRM/tivoization, patents, "additional restrictions" and warned a Balkanisation of the "Open Source Universe" by the GPLv3. Linus Torvalds, who decided not to adopt the GPLv3 for the Linux kernel, reiterated his criticism even years later.


title: Linux kernel

text: It is debated whether some loadable kernel modules (LKMs) are to be considered derivative works under copyright law, and thereby whether or not they fall under the terms of the GPL.


title: Linux kernel

text: In accordance with the license rules, LKMs using only a public subset of the kernel interfaces are non-derived works, thus Linux gives system administrators the mechanisms to load out-of-tree binary objects into the kernel address space.


title: Linux kernel

text: There are some out-of-tree loadable modules that make legitimate use of the "dma_buf" kernel feature. GPL compliant code can certainly use it. However, a different possible use case would be Nvidia Optimus that pairs a fast GPU with an Intel integrated GPU, where the Nvidia GPU writes into the Intel framebuffer when it is active. But, Nvidia cannot use this infrastructure because it necessitates bypassing a rule that can only be used by LKMs that are also GPL. Alan Cox replied on LKML, rejecting a request from one of their engineers to remove this technical enforcement from the API. Torvalds clearly stated on the LKML that "[I] claim that binary-only kernel modules ARE derivative "by default"'".


title: Linux kernel

text: On the other hand, Torvalds has also said that "[one] gray area in particular is something like a driver that was originally written for another operating system (i.e., clearly not a derived work of Linux in origin). THAT is a gray area, and _that_ is the area where I personally believe that some modules may be considered to not be derived works simply because they weren't designed for Linux and don't depend on any special Linux behaviour". Proprietary graphics drivers, in particular, are heavily discussed.


title: Linux kernel

text: Whenever proprietary modules are loaded into Linux, the kernel marks itself as being "tainted", and therefore bug reports from tainted kernels will often be ignored by developers.


title: Linux kernel

text: The official kernel, that is the Linus git branch at the kernel.org repository, contains binary blobs released under the terms of the GNU GPLv2 license. Linux can also search filesystems to locate binary blobs, proprietary firmware, drivers, or other executable modules, then it can load and link them into kernel space.


title: Linux kernel

text: When it is needed (e.g., for accessing boot devices or for speed) firmware can be built-in to the kernel, this means building the firmware into vmlinux; however this is not always a viable option for technical or legal issues (e.g., it is not permitted to do this with firmware that is non-GPL compatible, although this is quite common nonetheless).


title: Linux kernel

text: Linux is a registered trademark of Linus Torvalds in the United States, the European Union, and some other countries. A legal battle over the trademark began in 1996, when William Della Croce, a lawyer who was never involved in the development of Linux, started requesting licensing fees for the use of the word "Linux". After it was proven that the word was in common use long before Della Croce's claimed first use, the trademark was awarded to Torvalds.


title: Trigonometry

text: Trigonometry () is a branch of mathematics that studies relationships between side lengths and angles of triangles. The field emerged in the Hellenistic world during the 3rd century BC from applications of geometry to astronomical studies. The Greeks focused on the calculation of chords, while mathematicians in India created the earliest-known tables of values for trigonometric ratios (also called trigonometric functions) such as sine.


title: Trigonometry

text: Throughout history, trigonometry has been applied in areas such as geodesy, surveying, celestial mechanics, and navigation.


title: Trigonometry

text: trigonometric identities are commonly used for rewriting trigonometrical expressions with the aim to simplify an expression, to find a more useful form of an expression, or to solve an equation.


title: Trigonometry

text: Sumerian astronomers studied angle measure, using a division of circles into 360 degrees. They, and later the Babylonians, studied the ratios of the sides of similar triangles and discovered some properties of these ratios but did not turn that into a systematic method for finding sides and angles of triangles. The ancient Nubians used a similar method.


title: Trigonometry

text: In the 3rd century BC, Hellenistic mathematicians such as Euclid and Archimedes studied the properties of chords and inscribed angles in circles, and they proved theorems that are equivalent to modern trigonometric formulae, although they presented them geometrically rather than algebraically. In 140 BC, Hipparchus (from Nicaea, Asia Minor) gave the first tables of chords, analogous to modern tables of sine values, and used them to solve problems in trigonometry and spherical trigonometry. In the 2nd century AD, the Greco-Egyptian astronomer Ptolemy (from Alexandria, Egypt) constructed detailed trigonometric tables (Ptolemy's table of chords) in Book 1, chapter 11 of his "Almagest". Ptolemy used chord length to define his trigonometric functions, a minor difference from the sine convention we use today. (The value we call sin(θ) can be found by looking up the chord length for twice the angle of interest (2θ) in Ptolemy's table, and then dividing that value by two.) Centuries passed before more detailed tables were produced, and Ptolemy's treatise remained in use for performing trigonometric calculations in astronomy throughout the next 1200 years in the medieval Byzantine, Islamic, and, later, Western European worlds.


title: Trigonometry

text: The modern sine convention is first attested in the "Surya Siddhanta", and its properties were further documented by the 5th century (AD) Indian mathematician and astronomer Aryabhata. These Greek and Indian works were translated and expanded by medieval Islamic mathematicians. By the 10th century, Islamic mathematicians were using all six trigonometric functions, had tabulated their values, and were applying them to problems in spherical geometry. The Persian polymath Nasir al-Din al-Tusi has been described as the creator of trigonometry as a mathematical discipline in its own right. He was the first to treat trigonometry as a mathematical discipline independent from astronomy, and he developed spherical trigonometry into its present form. He listed the six distinct cases of a right-angled triangle in spherical trigonometry, and in his "On the Sector Figure", he stated the law of sines for plane and spherical triangles, discovered the law of tangents for spherical triangles, and provided proofs for both these laws. Knowledge of trigonometric functions and methods reached Western Europe via Latin translations of Ptolemy's Greek "Almagest" as well as the works of Persian and Arab astronomers such as Al Battani and Nasir al-Din al-Tusi. One of the earliest works on trigonometry by a northern European mathematician is "De Triangulis" by the 15th century German mathematician Regiomontanus, who was encouraged to write, and provided with a copy of the "Almagest", by the Byzantine Greek scholar cardinal Basilios Bessarion with whom he lived for several years. At the same time, another translation of the "Almagest" from Greek into Latin was completed by the Cretan George of Trebizond. Trigonometry was still so little known in 16th-century northern Europe that Nicolaus Copernicus devoted two chapters of "De revolutionibus orbium coelestium" to explain its basic concepts.


title: Trigonometry

text: Driven by the demands of navigation and the growing need for accurate maps of large geographic areas, trigonometry grew into a major branch of mathematics. Bartholomaeus Pitiscus was the first to use the word, publishing his "Trigonometria" in 1595. Gemma Frisius described for the first time the method of triangulation still used today in surveying. It was Leonhard Euler who fully incorporated complex numbers into trigonometry. The works of the Scottish mathematicians James Gregory in the 17th century and Colin Maclaurin in the 18th century were influential in the development of trigonometric series. Also in the 18th century, Brook Taylor defined the general Taylor series.


title: Trigonometry

text: Trigonometric ratios are the ratios between edges of a right triangle. These ratios are given by the following trigonometric functions of the known angle "A", where "a", " b" and "h" refer to the lengths of the sides in the accompanying figure:


title: Trigonometry

text: The hypotenuse is the side opposite to the 90 degree angle in a right triangle; it is the longest side of the triangle and one of the two sides adjacent to angle "A". The adjacent leg is the other side that is adjacent to angle "A". The opposite side is the side that is opposite to angle "A". The terms perpendicular and base are sometimes used for the opposite and adjacent sides respectively. See below under Mnemonics.


title: Trigonometry

text: Since any two right triangles with the same acute angle "A" are similar, the value of a trigonometric ratio depends only on the angle "A".


title: Trigonometry

text: The reciprocals of these functions are named the cosecant (csc), secant (sec), and cotangent (cot), respectively:


title: Trigonometry

text: The cosine, cotangent, and cosecant are so named because they are respectively the sine, tangent, and secant of the complementary angle abbreviated to "co-".


title: Trigonometry

text: With these functions, one can answer virtually all questions about arbitrary triangles by using the law of sines and the law of cosines. These laws can be used to compute the remaining angles and sides of any triangle as soon as two sides and their included angle or two angles and a side or three sides are known.


title: Trigonometry

text: A common use of mnemonics is to remember facts and relationships in trigonometry. For example, the "sine", "cosine", and "tangent" ratios in a right triangle can be remembered by representing them and their corresponding sides as strings of letters. For instance, a mnemonic is SOH-CAH-TOA:


title: Trigonometry

text: One way to remember the letters is to sound them out phonetically (i.e. , similar to Krakatoa). Another method is to expand the letters into a sentence, such as "Some Old Hippie Caught Another Hippie Trippin' On Acid".


title: Trigonometry

text: Trigonometric ratios can also be represented using the unit circle, which is the circle of radius 1 centered at the origin in the plane. In this setting, the terminal side of an angle "A" placed in standard position will intersect the unit circle in a point (x,y), where formula_7 and formula_8. This representation allows for the calculation of commonly found trigonometric values, such as those in the following table:


title: Trigonometry

text: Using the unit circle, one can extend the definitions of trigonometric ratios to all positive and negative arguments (see trigonometric function).


title: Trigonometry

text: Because the six main trigonometric functions are periodic, they are not injective (or, 1 to 1), and thus are not invertible. By restricting the domain of a trigonometric function, however, they can be made invertible.


title: Trigonometry

text: The names of the inverse trigonometric functions, together with their domains and range, can be found in the following table:


title: Trigonometry

text: When considered as functions of a real variable, the trigonometric ratios can be represented by an infinite series. For instance, sine and cosine have the following representations:


title: Trigonometry

text: With these definitions the trigonometric functions can be defined for complex numbers. When extended as functions of real or complex variables, the following formula holds for the complex exponential:


title: Trigonometry

text: This complex exponential function, written in terms of trigonometric functions, is particularly useful.


title: Trigonometry

text: Trigonometric functions were among the earliest uses for mathematical tables. Such tables were incorporated into mathematics textbooks and students were taught to look up values and how to interpolate between the values listed to get higher accuracy. Slide rules had special scales for trigonometric functions.


title: Trigonometry

text: Scientific calculators have buttons for calculating the main trigonometric functions (sin, cos, tan, and sometimes cis and their inverses). Most allow a choice of angle measurement methods: degrees, radians, and sometimes gradians. Most computer programming languages provide function libraries that include the trigonometric functions. The floating point unit hardware incorporated into the microprocessor chips used in most personal computers has built-in instructions for calculating trigonometric functions.


title: Trigonometry

text: In addition to the six ratios listed earlier, there are additional trigonometric functions that were historically important, though seldom used today. These include the chord (), the versine () (which appeared in the earliest tables), the coversine (), the haversine (), the exsecant (), and the excosecant (). See List of trigonometric identities for more relations between these functions.


title: Trigonometry

text: For centuries, spherical trigonometry has been used for locating solar, lunar, and stellar positions, predicting eclipses, and describing the orbits of the planets.


title: Trigonometry

text: In modern times, the technique of triangulation is used in astronomy to measure the distance to nearby stars, as well as in satellite navigation systems.


title: Trigonometry

text: Historically, trigonometry has been used for locating latitudes and longitudes of sailing vessels, plotting courses, and calculating distances during navigation.


title: Trigonometry

text: Trigonometry is still used in navigation through such means as the Global Positioning System and artificial intelligence for autonomous vehicles.


title: Trigonometry

text: In land surveying, trigonometry is used in the calculation of lengths, areas, and relative angles between objects.


title: Trigonometry

text: The sine and cosine functions are fundamental to the theory of periodic functions, such as those that describe sound and light waves. Fourier discovered that every continuous, periodic function could be described as an infinite sum of trigonometric functions.


title: Trigonometry

text: Even non-periodic functions can be represented as an integral of sines and cosines through the Fourier transform. This has applications to quantum mechanics and communications, among other fields.


title: Trigonometry

text: Trigonometry is useful in many physical sciences, including acoustics, and optics. In these areas, they are used to describe sound and light waves, and to solve boundary- and transmission-related problems.


title: Trigonometry

text: Other fields that use trigonometry or trigonometric functions include music theory, geodesy, audio synthesis, architecture, electronics, biology, medical imaging (CT scans and ultrasound), chemistry, number theory (and hence cryptology), seismology, meteorology, oceanography, image compression, phonetics, economics, electrical engineering, mechanical engineering, civil engineering, computer graphics, cartography, crystallography and game development.


title: Trigonometry

text: Trigonometry has been noted for its many identities, that is, equations that are true for all possible inputs.


title: Trigonometry

text: Identities involving only angles are known as "trigonometric identities". Other equations, known as "triangle identities", relate both the sides and angles of a given triangle.


title: Trigonometry

text: In the following identities, "A", "B" and "C" are the angles of a triangle and "a", "b" and "c" are the lengths of sides of the triangle opposite the respective angles (as shown in the diagram).


title: Trigonometry

text: where formula_13 is the area of the triangle and "R" is the radius of the circumscribed circle of the triangle:


title: Trigonometry

text: The law of cosines (known as the cosine formula, or the "cos rule") is an extension of the Pythagorean theorem to arbitrary triangles:


title: Trigonometry

text: The law of tangents, developed by François Viète, is an alternative to the Law of Cosines when solving for the unknown edges of a triangle, providing simpler computations when using trigonometric tables. It is given by:


title: Trigonometry

text: Given two sides "a" and "b" and the angle between the sides "C", the area of the triangle is given by half the product of the lengths of two sides and the sine of the angle between the two sides:


title: Trigonometry

text: Heron's formula is another method that may be used to calculate the area of a triangle. This formula states that if a triangle has sides of lengths "a", "b", and "c", and if the semiperimeter is


title: Trigonometry

text: The following trigonometric identities are related to the Pythagorean theorem and hold for any value:


title: Trigonometry

text: The second and third equations are derived from dividing the first equation by formula_24 and formula_25, respectively.


title: Trigonometry

text: Euler's formula, which states that formula_26, produces the following analytical identities for sine, cosine, and tangent in terms of "e" and the imaginary unit "i":


title: Trigonometry

text: Other commonly used trigonometric identities include the half-angle identities, the angle sum and difference identities, and the product-to-sum identities.


title: Dextroamphetamine

text: Dextroamphetamine is a central nervous system (CNS) stimulant and an amphetamine enantiomer that is prescribed for the treatment of attention deficit hyperactivity disorder (ADHD) and narcolepsy. It is also used as an athletic performance and cognitive enhancer, and recreationally as an aphrodisiac and euphoriant.


title: Dextroamphetamine

text: The amphetamine molecule exists as two enantiomers, levoamphetamine and dextroamphetamine. Dextroamphetamine is the dextrorotatory, or 'right-handed', enantiomer and exhibits more pronounced effects on the central nervous system than levoamphetamine. Pharmaceutical dextroamphetamine sulfate is available as both a brand name and generic drug in a variety of dosage forms. Dextroamphetamine is sometimes prescribed as the inactive prodrug lisdexamfetamine dimesylate, which is converted into dextroamphetamine after absorption.


title: Dextroamphetamine

text: Dextroamphetamine, like other amphetamines, elicits its stimulating effects via several distinct actions: it inhibits or reverses the transporter proteins for the monoamine neurotransmitters (namely the serotonin, norepinephrine and dopamine transporters) either via trace amine-associated receptor 1 (TAAR1) or in a TAAR1 independent fashion when there are high cytosolic concentrations of the monoamine neurotransmitters and it releases these neurotransmitters from synaptic vesicles via vesicular monoamine transporter 2. It also shares many chemical and pharmacological properties with human trace amines, particularly phenethylamine and , the latter being an isomer of amphetamine produced within the human body.


title: Dextroamphetamine

text: Dextroamphetamine is used to treat attention deficit hyperactivity disorder (ADHD) and narcolepsy (a sleep disorder), and is sometimes prescribed for depression and obesity.


title: Dextroamphetamine

text: Dextroamphetamine is also used recreationally as a euphoriant and aphrodisiac, and like other amphetamines is used as a club drug for its energetic and euphoric high. Dextroamphetamine is considered to have a high potential for misuse in a recreational manner since individuals typically report feeling euphoric, more alert, and more energetic after taking the drug. Large recreational doses of dextroamphetamine may produce symptoms of dextroamphetamine overdose. Recreational users sometimes open dexedrine capsules and crush the contents in order to insufflate it or subsequently dissolve it in water and inject it. Injection into the bloodstream can be dangerous because insoluble fillers within the tablets can block small blood vessels. Chronic overuse of dextroamphetamine can lead to severe drug dependence, resulting in withdrawal symptoms when drug use stops.


title: Dextroamphetamine

text: Many types of substances are known to interact with amphetamine, resulting in altered drug action or metabolism of amphetamine, the interacting substance, or both. Inhibitors of the enzymes that metabolize amphetamine (e.g., CYP2D6 and FMO3) will prolong its elimination half-life, meaning that its effects will last longer. Amphetamine also interacts with , particularly monoamine oxidase A inhibitors, since both MAOIs and amphetamine increase plasma catecholamines (i.e., norepinephrine and dopamine); therefore, concurrent use of both is dangerous. Amphetamine modulates the activity of most psychoactive drugs. In particular, amphetamine may decrease the effects of sedatives and depressants and increase the effects of stimulants and antidepressants. Amphetamine may also decrease the effects of antihypertensives and antipsychotics due to its effects on blood pressure and dopamine respectively. Zinc supplementation may reduce the minimum effective dose of amphetamine when it is used for the treatment of ADHD.


title: Dextroamphetamine

text: Amphetamine and its enantiomers have been identified as potent full agonists of trace amine-associated receptor 1 (TAAR1), a GPCR, discovered in 2001, that is important for regulation of monoaminergic systems in the brain. Activation of TAAR1 increases cAMP production via adenylyl cyclase activation and inhibits the function of the dopamine transporter, norepinephrine transporter, and serotonin transporter, as well as inducing the release of these monoamine neurotransmitters (effluxion). Amphetamine enantiomers are also substrates for a specific neuronal synaptic vesicle uptake transporter called VMAT2. When amphetamine is taken up by VMAT2, the vesicle releases (effluxes) dopamine, norepinephrine, and serotonin, among other monoamines, into the cytosol in exchange.


title: Dextroamphetamine

text: Dextroamphetamine (the dextrorotary enantiomer) and levoamphetamine (the levorotary enantiomer) have identical pharmacodynamics, but their binding affinities to their biomolecular targets vary. Dextroamphetamine is a more potent agonist of TAAR1 than levoamphetamine. Consequently, dextroamphetamine produces roughly three to four times more central nervous system (CNS) stimulation than levoamphetamine; however, levoamphetamine has slightly greater cardiovascular and peripheral effects.


title: Dextroamphetamine

text: Racemic amphetamine was first synthesized under the chemical name "phenylisopropylamine" in Berlin, 1887 by the Romanian chemist Lazar Edeleanu. It was not widely marketed until 1932, when the pharmaceutical company Smith, Kline & French (now known as GlaxoSmithKline) introduced it in the form of the Benzedrine inhaler for use as a bronchodilator. Notably, the amphetamine contained in the Benzedrine inhaler was the liquid free-base, not a chloride or sulfate salt.


title: Dextroamphetamine

text: Three years later, in 1935, the medical community became aware of the stimulant properties of amphetamine, specifically dextroamphetamine, and in 1937 Smith, Kline, and French introduced tablets under the brand name Dexedrine. In the United States, Dexedrine was approved to treat narcolepsy and attention disorders. In Canada indications once included epilepsy and parkinsonism. Dextroamphetamine was marketed in various other forms in the following decades, primarily by Smith, Kline, and French, such as several combination medications including a mixture of dextroamphetamine and amobarbital (a barbiturate) sold under the tradename Dexamyl and, in the 1950s, an extended release capsule (the "Spansule"). Preparations containing dextroamphetamine were also used in World War II as a treatment against fatigue.


title: Dextroamphetamine

text: It quickly became apparent that dextroamphetamine and other amphetamines had a high potential for misuse, although they were not heavily controlled until 1970, when the Comprehensive Drug Abuse Prevention and Control Act was passed by the United States Congress. Dextroamphetamine, along with other sympathomimetics, was eventually classified as Schedule II, the most restrictive category possible for a drug with a government-sanctioned, recognized medical use. Internationally, it has been available under the names AmfeDyn (Italy), Curban (US), Obetrol (Switzerland), Simpamina (Italy), Dexedrine/GSK (US & Canada), Dexedrine/UCB (United Kingdom), Dextropa (Portugal), and Stild (Spain). It became popular on the mod scene in England in the early 1960s, and carried through to the Northern Soul scene in the north of England to the end of the 1970s.


title: Dextroamphetamine

text: In October 2010, GlaxoSmithKline sold the rights for Dexedrine Spansule to Amedra Pharmaceuticals (a subsidiary of CorePharma).


title: Dextroamphetamine

text: The U.S. Air Force uses dextroamphetamine as one of its "go pills", given to pilots on long missions to help them remain focused and alert. Conversely, "no-go pills" are used after the mission is completed, to combat the effects of the mission and "go-pills". The Tarnak Farm incident was linked by media reports to the use of this drug on long term fatigued pilots. The military did not accept this explanation, citing the lack of similar incidents. Newer stimulant medications or awakeness promoting agents with different side effect profiles, such as modafinil, are being investigated and sometimes issued for this reason.


title: Dextroamphetamine

text: Dextroamphetamine is available as a transdermal patch containing dextroamphetamine base under the brand name Xelstrym. It is available in four dosage forms each worn for 9hours that deliver dextroamphetamine at rates of 4.5mg/9hours, 9mg/9hours, 13.5mg/9hours, and 18mg/9hours.


title: Dextroamphetamine

text: In the United States, immediate release (IR) formulations of dextroamphetamine sulfate are available generically as 5 mg and 10 mg tablets, marketed by Barr (Teva Pharmaceutical Industries), Mallinckrodt Pharmaceuticals, Wilshire Pharmaceuticals, Aurobindo Pharmaceutical USA and CorePharma. Previous IR tablets sold under the brand names Dexedrine and Dextrostat have been discontinued but in 2015, IR tablets became available by the brand name Zenzedi, offered as 2.5 mg, 5 mg, 7.5 mg, 10 mg, 15 mg, 20 mg and 30 mg tablets. Dextroamphetamine sulfate is also available as a controlled-release (CR) capsule preparation in strengths of 5 mg, 10 mg, and 15 mg under the brand name Dexedrine Spansule, with generic versions marketed by Barr and Mallinckrodt. A bubblegum flavored oral solution is available under the brand name ProCentra, manufactured by FSC Pediatrics, which is designed to be an easier method of administration in children who have difficulty swallowing tablets, each 5 mL contains 5 mg dextroamphetamine. The conversion rate between dextroamphetamine sulfate to amphetamine free base is .728.


title: Dextroamphetamine

text: In Australia, dexamphetamine is available in bottles of 100 instant release 5 mg tablets as a generic drug. or slow release dextroamphetamine preparations may be compounded by individual chemists. In the United Kingdom, it is available in 5 mg instant release sulfate tablets under the generic name dexamfetamine sulfate as well as 10 mg and 20 mg strength tablets under the brand name Amfexa. It is also available in generic dexamfetamine sulfate 5 mg/ml oral sugar-free syrup. The brand name Dexedrine was available in the United Kingdom prior to UCB Pharma disinvesting the product to another pharmaceutical company (Auden Mckenzie).


title: Dextroamphetamine

text: Dextroamphetamine is the active metabolite of the prodrug lisdexamfetamine (L-lysine-dextroamphetamine), available by the brand name Vyvanse (Elvanse in the European market) (Venvanse in the Brazil market) (lisdexamfetamine dimesylate). Dextroamphetamine is liberated from lisdexamfetamine enzymatically following contact with red blood cells. The conversion is rate-limited by the enzyme, which prevents high blood concentrations of dextroamphetamine and reduces lisdexamfetamine's drug liking and abuse potential at clinical doses. Vyvanse is marketed as once-a-day dosing as it provides a slow release of dextroamphetamine into the body. Vyvanse is available as capsules, and chewable tablets, and in seven strengths; 10 mg, 20 mg, 30 mg, 40 mg, 50 mg, 60 mg, and 70 mg. The conversion rate between lisdexamfetamine dimesylate (Vyvanse) to dextroamphetamine base is 29.5%.


title: Dextroamphetamine

text: Another pharmaceutical that contains dextroamphetamine is commonly known by the brand name Adderall. It is available as immediate release (IR) tablets and extended release (XR) capsules. Adderall contains equal amounts of four amphetamine salts:


title: Dextroamphetamine

text: Adderall has a total amphetamine base equivalence of 63%. While the enantiomer ratio by dextroamphetamine salts to levoamphetamine salts is 3:1, the amphetamine base content is 75.9% dextroamphetamine, 24.1% levoamphetamine.


title: Hijra (South Asia)

text: In the Indian subcontinent, hijra are eunuchs, intersex people, or transgender people who live in communities that follow a kinship system known as guru-chela system. Also known as aravani, aruvani, and jogappa, the hijra community in India prefer to call themselves "kinnar", referring to the mythological beings that excel at song and dance. In Pakistan, they are known as khawaja sira, the equivalent of transgender in the Urdu language.


title: Hijra (South Asia)

text: Hijras are officially recognised as a third gender in the Abbottabad, being considered neither completely male nor female. Hijras have a recorded history in the Indian subcontinent since antiquity, as suggested by the "Kama Sutra". Starting in the 19th century, hijras were targeted by British colonial authorities who sought to eradicate them, criminalised under Section 377 of the Indian Penal Code (1860), and labelled as a criminal tribe in 1871. This encouraged anti-hijra sentiments throughout the Indian subcontinent, the legacies of which continued in the post-colonial era.


title: Hijra (South Asia)

text: Many hijras today live in well-defined and organised all-hijra communities, led by a guru. These communities have consisted over generations of those who are in abject poverty or who have been rejected by or fled their family of origin. Many work as sex workers.


title: Hijra (South Asia)

text: The word "hijra" is a Hindustani word. It has traditionally been translated into English as "eunuch" or "hermaphrodite", where "the irregularity of the male genitalia is central to the definition". However, in general hijras have been assigned male at birth, with only a few having been born with intersex variations. Some hijras undergo an initiation rite into the hijra community called nirvaan, which involves the removal of the penis, scrotum and testicles.


title: Hijra (South Asia)

text: Since the late 20th century, some hijra activists and non-government organizations have lobbied for official recognition of the hijra as a kind of "third sex" or "third gender", as neither man nor woman. Hijras have successfully gained this recognition in Bangladesh and are eligible for priority in education and certain kinds of low paid jobs. In India, the Supreme Court in April 2014 recognised hijras, transgender people, eunuchs, and intersex people as a "third gender" in law. Nepal, Pakistan, India and Bangladesh have all legally accepted the existence of a third gender, with India, Pakistan and Nepal including an option for them on passports and certain official documents.


title: Hijra (South Asia)

text: The Hindustani word "hijra" may alternately be romanized as "hijira", "hijda", "hijada", "hijara", "hijrah" and is pronounced . This term is generally considered derogatory in Urdu and the term "Khwaja Sara" is used instead. Khawajasira is sometimes seen as a more respectable term and has been reclaimed by the community given its precolonial origins and revered status within Islamic spirituality. Another such term is "khasuaa" (खसुआ) or "khusaraa" (खुसरा).


title: Hijra (South Asia)

text: A number of terms across the culturally and linguistically diverse Indian subcontinent represent similar sex or gender categories. While these are rough synonyms, they may be better understood as separate identities due to regional cultural differences. In Odia, a hijra is referred to as "hinjida" or "hinjda", in Tamil as "ali", "aravanni", "aravani" or "aruvani" (often considered derogatory, and have been supplanted by in-community terms rejecting the concept of hijra for a broader trans identity, such as "thirunangai" (; "respected woman"), "thirunambi" (; "respected man") and "thirunar" (; "respected person") for trans woman, man and person respectively), in Punjabi as "khusra" or "jankha", in Kannada as "mangalamukhi" (ಮಂಗಳಮುಖಿ), in Sindhi as "khadra", and in Gujarati as "pavaiyaa" (પાવૈયા). In Bengali, hijra is called "হিজড়া", "hijra", "hijla", "hijre", "hizra", or "hizre". In Konkani, they are known as "hizddem" or "hizdô".


title: Hijra (South Asia)

text: In North India, the goddess Bahuchara Mata is worshipped by pavaiyaa. In South India, the goddess Renuka is believed to have the power to change one's sex. Male devotees in female clothing are known as "jogappa". They perform similar roles to hijra, such as dancing and singing at birth ceremonies and weddings.


title: Hijra (South Asia)

text: The word "kothi" (or "koti") is common across India, similar to the kathoey of Thailand, although kothis are often distinguished from hijras. Kothis are regarded as feminine men or boys who take a feminine role in sex with men, but do not live in the kind of intentional communities that hijras usually live in. Additionally, not all kothis have undergone initiation rites or the body modification steps to become a hijra. Local equivalents include "durani" (Kolkata), "menaka" (Cochin), "meti" (Nepal), and "zenana" (Pakistan).


title: Hijra (South Asia)

text: Hijra used to be translated in English as "eunuch" or "hermaphrodite", although LGBT historians or human rights activists have sought to include them as being transgender. In a series of meetings convened between October 2013 and January 2014 by the transgender experts committee of India's Ministry of Social Justice and Empowerment, hijra and other trans activists asked that the term "eunuch" be discontinued from usage in government documents, as it is not a term with which the communities identify.


title: Hijra (South Asia)

text: These identities have no exact match in the taxonomy of gender and sexual orientation, and challenge Western ideas of sex and gender.


title: Hijra (South Asia)

text: A common misconception of many in Indian society is that "hijra" are intersex, asexual, and impotent. This is not fully accurate as many hijra are sexually active, in relationships, or may even partake in sex work. In India, some Hijras do not define themselves by specific sexual orientation, but rather by renouncing sexuality altogether. Sexual energy is transformed into sacred powers. However, these notions can come in conflict with the practical, which is that hijras are often employed as prostitutes. Furthermore, in India a feminine male who takes a "receptive" role in sex with a man will often identify as a "kothi" (or the local equivalent term). While kothis are usually distinguished from hijras as a separate gender identity, they often dress as women and act in a feminine manner in public spaces, even using feminine language to refer to themselves and each other. The usual partners of hijras and kothis are men who consider themselves heterosexual as they are the ones who penetrate. These male partners are often married, and any relationships or sex with "kothis" or hijras are usually kept secret from the community at large. Some hijras may form relationships with men and even marry, although their marriage is not usually recognized by law or religion. Hijras and kothis often have a name for these masculine sexual or romantic partners; for example, "panthi" in Bangladesh, "giriya" in Delhi or "sridhar" in Cochin. A 2015 study found that self identified "panthi" participants reported their sexual orientation as bisexual but otherwise aligned with male-typical in other study measures. Identification as "hijra", "kothi" and "panthi" can be distinguished from Western categories, as they go beyond sexual attraction (such as gay, lesbian or bisexual in the West) to also include gender roles/presentation and preference in sexual position.


title: Hijra (South Asia)

text: A qualitative, interview based study found that those who fall under the umbrella of being hijra tend to identify with certain ‘schools of thought’ including Khusrapan and Zananapan. These terms refer to categories of hijra functioning. Those who follow Khusrapan identify with being a Hermaphrodite, denouncing sex work while believing that the ancient practices of bestowing prayers and blessings are to be depended on for sustenance. In contrast, the Zananapan school of thought has followers who may be born biologically male but identify with being a woman through their appearance and lifestyle. They often turn to begging or sex work as a consequence of social exclusion.


title: Hijra (South Asia)

text: The ancient Kama Sutra mentions the performance of fellatio by feminine people of a third sex ("tritiya prakriti"). This passage has been variously interpreted as referring to men who desired other men, so-called eunuchs ("those disguised as males, and those that are disguised as females"), male and female trans people ("the male takes on the appearance of a female and the female takes on the appearance of the male"), or two kinds of biological males, one dressed as a woman, the other as a man. Furthermore, in the Puranas three kinds of "devas" or divine beings of music and dance were identified. These included "apsaras", "gandharvas", and "kinnars", with the former two referring to female and male while the latter refers to ‘neuters’. Additionally, the early writings of the Manu Smriti explained the biological origin of the sexes, identifying a third sex that could result if there was an equal prevalence of male and female 'seed'.


title: Hijra (South Asia)

text: Hijra identity and culture is documented to have evolved during the Delhi Sultanate (1226-1526) and Mughal Empire (1526-1707), where hijras held positions as servants for elite households, manual laborers, military commanders, political advisors, and guardians of the harem.


title: Hijra (South Asia)

text: Franciscan travelers in the 1650s noted the presence of "men and boys who dress like women" roaming the streets of Thatta, in modern Pakistan. The presence of these individuals was taken to be a sign of the city's depravity.


title: Hijra (South Asia)

text: Beginning in the 1850s with the British Raj, colonial authorities deployed various strategies to eradicate hijras, whom they saw as "a breach of public decency." The British viewed hijras as incapable of "moral transformation" and assimilation and therefore subjected them to eliminatory policies. In 1860, hijras became subjected to Section 377 of the Indian Penal Code which allowed British authorities to prosecute hijras simply for existing. Even though they were already criminalized under Section 377, in 1861, authorities of the North-Western Provinces (NWP) sought to enact a 'special law' against hijras. By 1870, no high-ranking British officials argued against the implementation of special legislation to address the 'hijra problem,' thus solidifying a violent anti-hijra campaign all across the Indian subcontinent.


title: Hijra (South Asia)

text: Anti-hijra laws were enacted; whereas a law outlawing castration, a central part of the hijra community (although not required for community membership), was left intact, though it was rarely enforced. The hijra were included in the Criminal Tribes Act (1871) and labelled a "criminal tribe", now subjected to compulsory registration, strict monitoring, and stigmatization. Because of economic costs, which were the main impetus behind British colonialism in India, hijras and other so-called "criminal tribes" were unable to be collectively sequestered from colonial society. British Lieutenant-Governor Edmund Drummond (1814-1895) framed the anti-hijra campaign as a necessary project of "extinguishment" and "extinction." Intense surveillance tactics were enacted over communities with hopes to eradicate hijras permanently.


title: Hijra (South Asia)

text: Child removal projects, which had already begun elsewhere in the British Empire, like colonial Australia with the forced removal of aboriginal children for assimilation into white settler society, were brought to India for all 'criminal tribes' officially in 1911. Child removal was already in "de facto" practice against hijras since the passage of the Criminal Tribes Act (1871) to initiate the extermination of hijra communities by preventing initiation, since the dominant colonial narrative was that all hijra children were "kidnapped and enslaved". Jessica Hinchy notes that the elimination-oriented tactics carried out toward hijras during the colonial era were comparable to what Patrick Wolfe called the 'logic of elimination' in British settler colonies, such as the United States and Australia, as well as the anti-joya campaigns executed by Spanish colonial authorities against third gender people centuries earlier in the establishment of New Spain (1535-1821).


title: Hijra (South Asia)

text: After independence, hijras survived these colonial extermination attempts. However, the centuries-old stigma continues as a legacy of British colonialism. Hijra communities remain throughout modern states of Pakistan, India, Nepal, and Bangladesh, although they continue to face social marginalization and police abuse. In the late 20th and early 21st centuries, hijras became the subject of more attention, being the focus of numerous documentaries, news features, ethnographies, monographs, and dissertations. Gayatri Reddy writes that in the 21st century, hijras have also been 'mainstreamed' into popular films: "given this history of near invisibility, the recent attention focused on hijras has been unsettling for both hijras and non-hijras."


title: Hijra (South Asia)

text: Most hijras live at the margins of society with very low status; the very word "hijra" is sometimes used in a derogatory manner. The Indian lawyer and author Rajesh Talwar has written a book, titled "The Third Sex and Human Rights", highlighting the human rights abuses suffered by the community. Few employment opportunities are available to hijras. Many get their income from performing at ceremonies (toli), begging (dheengna), or prostitution ('raarha')—an occupation of eunuchs also recorded in premodern times. Violence against hijras, especially those who are prostitutes, is often brutal, and occurs in public spaces, police stations, prisons, and their homes. As with transgender people in most of the world, they face extreme discrimination in health, housing, education, employment, immigration, law, and any bureaucracy that is unable to place them into male or female gender categories.


title: Hijra (South Asia)

text: The aforementioned all-hijra communities are where many hijra seek refuge and move in. These are made up of a hierarchical structure with large groups of hijras from different areas forming lineages or "gharanas". A "naayak" is the head and primary decision maker for a gharana, determining policies for the community. Falling under naayaks are "gurus" (lit. "teachers"). Gurus are above community members and regulate daily life in the housing space (known as a "dera"). The followers of a "guru" are called "chelas". Traditionally, teachers and their disciples use these terms in many domains such as religious learning; however, they bear specific meaning in hijra communities as being about cultural learning—hijra chelas are taught about hijra customs by their guru. These communities reflect similarities to Western notions of found family.


title: Hijra (South Asia)

text: In these communities, the hijras usually refer to each other in feminine terms. Thus, they refer to their relations as sisters with those who fall around their age range or aunt with those older than them, and so on.


title: Hijra (South Asia)

text: In October 2013, Pakistani Christians and Muslims (Shia and Sunni) put pressure on the landlords of Imamia Colony to evict any transgender residents. I.A. Rehman, the director of the Human Rights Commission of Pakistan, said, "Generally in Pakistan, Khwaja Sira are not under threat. But they are in Khyber Pakhtunkhwa Province because of a 'new Islam' under way."