리눅스 커널
Linux kernel![]() | |
![]() 리눅스 커널 3.0.0 부팅 | |
원저자 | 리누스 토르발스 |
---|---|
개발자 | 지역 사회 공헌자 리누스 토르발스 |
초도출시 | 0.02 (1991년 10월 5일 | 전 (
안정적 방출 | 6.7.8[2] / 2024년 3월 2일 |
미리보기 릴리스 | 6.8-rc7[3] / 2024년 3월 3일 |
저장소 | |
로 적음 | C(이전 5.18 이후 C11, C89),[4] 녹(6.1 이후),[5] 조립 언어 |
사용 가능한 위치 | 영어 |
면허증. | Linux-syscall-note를[6][7][8][a] 사용하는 경우에만 GPL-2.0 |
웹사이트 | kernel |
리눅스 커널은 무료 오픈 소스,[12]: 4 모노리식, 모듈식, 멀티태스킹, 유닉스 계열 운영 체제 커널입니다. 원래 1991년 라이너스 토르발스가 i386 기반 PC용으로 작성했으며 곧 GNU 운영 체제의 커널로 채택되었으며, 이는 유닉스의 자유(libre) 대체용으로 작성되었습니다.
리눅스는 GNU General Public License 버전 2에서만 제공되지만 다른 호환되는 라이선스에 파일이 포함되어 있습니다.[11] 1990년대 후반부터 많은 수의 운영 체제 배포판의 일부로 포함되었으며, 그 중 많은 부분이 일반적으로 리눅스라고도 불립니다.
리눅스는 임베디드 장치, 모바일 장치(안드로이드 운영 체제에서의 사용 포함), 개인용 컴퓨터, 서버, 메인프레임 및 슈퍼컴퓨터와 같은 매우 다양한 컴퓨팅 시스템에 배포됩니다.[13] 특정 아키텍처 및 여러 사용 시나리오에 맞게 간단한 명령어 제품군을 사용할 수 있습니다(즉, 컴파일 전에 소스 코드를 수동으로 편집할 필요 없이).[14][15][16] 권한이 있는 사용자는 런타임에 커널 파라미터를 미세 조정할 수도 있습니다.[17][18][19] 대부분의 리눅스 커널 코드는 GCC의[12]: 18 [20] GNU 확장을 표준 C 프로그래밍 언어로 사용하고 커널의 제한된 부분에서 아키텍처별 명령어(ISA)를 사용하여 작성됩니다. 이를 통해 메모리 공간 및 작업 실행 시간 활용과 관련하여 고도로 최적화된 실행 파일(vmlinux)이 생성됩니다.[12]: 379–380
리눅스 커널 메일링 리스트(LKML)에서 일상적인 개발 논의가 진행됩니다. 변경 사항은 Torvalds가 BitKeeper의 무료 소프트웨어 대체로 처음 작성한 버전 제어 시스템 git를 사용하여 추적됩니다.
역사

1991년 4월, 당시 핀란드 헬싱키 대학교 컴퓨터 공학과에 재학 중이던 21세의 리누스 토르발스는 유닉스에서 영감을 받은 운영체제, 개인용 컴퓨터에 대한 몇 가지 간단한 아이디어를 연구하기 시작했습니다.[21] 그는 인텔 80386 어셈블리어로 된 작업 전환기와 터미널 드라이버로 시작했습니다.[21] 1991년 8월 25일, 토르발스는 유즈넷의 뉴스 그룹인 comp.os.minix에 다음과 같은 글을 올렸습니다.[22]
저는 386(486) AT 클론을 위한 (무료) 운영 체제를 하고 있습니다(그냥 취미로, gnu처럼 크고 전문적이지는 않을 것입니다). 이것은 4월부터 양조되고 있으며 준비를 시작하고 있습니다. 제 OS가 minix와 다소 비슷하기 때문에(무엇보다 현실적인 이유로 인해) 사람들이 minix를 좋아하거나 싫어하는 것에 대한 피드백을 원합니다.
현재 bash(1.08)와 gcc(1.40)를 포팅했는데 작동하는 것 같습니다. 이것은 몇 달 안에 실용적인 것을 얻을 수 있다는 것을 의미합니다.
예 - 미닉스 코드가 없으며 멀티 스레드가 있습니다. 보호할 수 있는 [sic](386 작업 전환 등 사용)이 아니며, AT-하드 디스크 외에는 아마 지원하지 않을 것입니다. 제가 가지고 있는 것은 이것이 전부입니다:-().
1991년 9월 17일, 토르발스는 리눅스 버전 0.01을 준비하고 "ftp"를 탑재했습니다.funet.fi " – 핀란드 대학 및 연구 네트워크(FUNET)의 FTP 서버. 코드를 컴파일하고 테스트하는 데 미닉스가 여전히 필요했기 때문에 실행할 수도 없었습니다.[23]
1991년 10월 5일, 토르발스는 리눅스의 첫 번째 "공식" 버전인 0.02를 발표했습니다.[24] 이 시점에서 리눅스는 Bash, GCC 및 기타 GNU 유틸리티를 실행할 수 있었습니다.[24][23]
[A.] 한 달 전에 말씀드렸듯이, AT-386 컴퓨터용 미니스 룩(Minix-Look)의 무료 버전을 개발하고 있습니다. 마침내 사용할 수 있는 단계에 이르렀고(원하는 것에 따라 다를 수 있지만), 더 많은 배포를 위해 소스를 제공할 의향이 있습니다. 그냥 0.02 버전...하지만 그 아래에서 bash, gcc, gnu-make, gnu-sed, compress 등을 성공적으로 실행했습니다.
그 후 초기 버전의 제한된 기능에도 불구하고 리눅스는 개발자와 사용자를 빠르게 확보했습니다. MINIX 커뮤니티의 일부 개발자를 포함하여 많은 사람들이 이 프로젝트에 코드를 기여했습니다.[citation needed] 당시 GNU 프로젝트는 무료 유닉스 대체에 필요한 많은 구성 요소인 GNU 운영 체제를 만들었지만 자체 커널인 GNU 허드는 불완전했습니다. 이 때문에 곧 리눅스 커널도 채택했습니다.[25] Berkeley Software Distribution은 아직 법적인 곤경에서 벗어나지 못했고, 무료 OS 커널을 놓고 경쟁하고 있지 않았습니다.[26]
토발즈는 커널이 주로 테스트용이며 생산적인 용도가 아님을 나타내기 위해 버전 0을 할당했습니다.[27] 1991년 12월에 출시된 버전 0.11은 동일한 커널을 실행하는 컴퓨터에 의해 컴파일될 수 있기 때문에 최초의 자체 호스팅 리눅스였습니다.
1992년 2월 토르발스가 버전 0.12를 출시했을 때, 그는 상업적 재배포를 허용하지 않았던 이전의 자체 초안 라이선스보다 GNU 일반 공중 사용 허가 버전 2(GPLv2)를 채택했습니다.[28] 유닉스와 달리 리눅스의 모든 소스 파일은 장치 드라이버를 포함하여 자유롭게 사용할 수 있습니다.[29] 리눅스의 초기 성공은 전 세계의 프로그래머와 테스터들에 의해 주도되었습니다. POSIX API의 지원으로 필요에 따라 커널 주소 공간의 진입점 역할을 하는 libC를 통해 리눅스는 유닉스용으로 개발된 소프트웨어와 애플리케이션을 실행할 수 있었습니다.[30]

1992년 1월 19일, 새로운 뉴스 그룹 alt.os.linux의 첫 번째 게시물이 제출되었습니다.[31] 1992년 3월 31일, 뉴스 그룹의 이름은 comp.os.linux로 변경되었습니다.[32] Andrew S는 리눅스가 마이크로커널이 아닌 단일 커널이라는 사실을 논쟁의 주제로 삼았습니다. MINIX의 창시자 타넨바움과 토르발스.[33] 타넨바움-토발즈 논쟁은 커널 아키텍처에 대한 일반적인 논의로 1992년 유즈넷 그룹 comp.os.minix에서 시작되었습니다.[34][35]
리눅스 버전 0.95는 X 윈도우 시스템을 실행할 수 있는 최초의 기능이었습니다.[36] 1994년 3월 리눅스 1.0.0은 176,250줄의 코드로 출시되었습니다.[37] 생산 환경에서 사용하기에 적합한 첫 번째 버전이었습니다.[27]
그것은 점으로 구분된 서너 개의 숫자로 커널을 위한 버전 관리 시스템을 시작했는데, 첫 번째는 메이저 릴리스, 두 번째는 마이너 릴리스, 세 번째는 수정 버전을 나타냅니다.[12]: 9 당시 홀수 번호의 마이너 릴리스는 개발 및 테스트용이었고, 짝수 번호의 마이너 릴리스는 생산용이었습니다. 선택적인 네 번째 숫자는 수정에 대한 패치 세트를 나타냅니다.[27] 개발 릴리스는 -rc("release candidate") 접미사로 표시되었습니다.
현재 버전 넘버링은 위와 조금 다릅니다. 짝수 대 홀수 번호가 삭제되었으며, 이제 특정 주요 버전은 처음 두 개의 번호로 표시되며, 전체적으로 표시됩니다. 타임프레임이 다음 메이저 개발을 위해 열려 있는 동안, -rcN 접미사는 다음 버전의 n번째 릴리스 후보를 식별하는 데 사용됩니다.[38] 예를 들어 버전 4.16의 릴리스 이전에는 7개의 4.16-rcN( -rc1에서 -rc7)이 있었습니다. 안정적인 출시가 이루어지면 그 유지보수는 "안정적인 팀"에게 넘어갑니다. 때때로 안정적인 릴리스에 대한 업데이트는 세 가지 번호 체계(예: 4.13.1, 4.13.2, ..., 4.13.16)에 의해 식별됩니다.[38]
버전 1.3의 커널 이후, 토발즈는 리눅스가 새로운 주요 숫자를 보증할 만큼 충분히 진화했다고 판단하여 1996년 6월 버전 2.0.0을 출시했습니다.[39][40] 이 시리즈에는 41개의 릴리스가 포함되었습니다. 2.0의 주요 특징은 대칭 다중 처리(SMP) 지원과 더 많은 유형의 프로세서 지원이었습니다.
Linux는 버전 2.0부터 특정 하드웨어 대상을 선택하고 아키텍처별 기능 및 최적화를 지원하도록 구성할 수 있습니다.[30] make *config 명령어 패밀리의 kbuild는 애드혹 커널 실행 파일(vmlinux) 및 로드 가능한 모듈을 구축하기 위한 수천 개의 옵션을 활성화하고 구성하는 데 사용됩니다.[14][15]
1999년 1월 20일에 출시된 버전 2.[41]2는 잠금 세분화 및 SMP 관리를 개선하여 m68k, PowerPC, Sparc64, Alpha 및 기타 64비트 플랫폼을 지원합니다.[42] 또한 마이크로소프트의 NTFS 읽기 전용 기능을 포함한 새로운 파일 시스템을 추가했습니다.[42] 1999년 IBM은 S/390 아키텍처 지원을 위해 리눅스 2.2.13 코드에 패치를 게시했습니다.[43]
2001년 1월 4일에 출시된 버전 2.4.0은 ISA 플러그 앤 플레이, USB 및 PC 카드를 지원합니다.[44] 리눅스 2.4는 펜티엄 4와 아이테니엄(Intel과 Hewlett-Packard가 이전 PA-RISC를 대체하기 위해 공동으로 개발한 ia64 ISA를 도입함)과 새로운 64비트 MIPS 프로세서를 지원합니다.[45] 2.4.x용 개발은 블루투스, LVM(Logical Volume Manager) 버전 1, RAID 지원, InterMezzo 및 ext3 파일 시스템 지원 등 시리즈 전반에 걸쳐 더 많은 기능을 사용할 수 있게 되었다는 점에서 약간 변경되었습니다.
버전 2.6.0은 2003년 12월 17일에 출시되었습니다.[46] 2.6.x용 개발은 시리즈 전반에 걸쳐 새로운 기능을 포함하는 방향으로 더욱 변화했습니다. 2.6 시리즈에서 변경된 사항은 다음과 같습니다: 메인라인 커널 소스에 µ 클리녹스 통합, PAE 지원, CPU의 여러 새로운 라인에 대한 지원, 메인라인 커널 소스에 고급 리눅스 사운드 아키텍처(ALSA) 통합, 최대 2명의 사용자 지원(최대 2명), 최대 2개의 프로세스 ID 지원(64비트만 지원), 32비트 아키텍처는 여전히 2개로15 제한됨),[47] 각 유형의 장치 유형 수와 장치 수가 크게 증가함, 향상된 64비트 지원, 최대 16테라바이트의 파일 크기를 지원하는 파일 시스템 지원, 커널 내 선점, NPTL(Native POSIX Thread Library) 지원, 메인 라인 커널 소스로의 사용자 모드 리눅스 통합, 메인 라인 커널 소스로의 SELinux 통합, InfiniBand 지원 등이 있습니다.
또한 주목할 만한 것은 2.6.x 릴리스부터 다양한 파일 시스템이 추가되었다는 것입니다. 현재 커널은 ext3, ext4, FUSE, Btrfs와 같은 리눅스용으로 설계된 파일 시스템과 [48]JFS, XFS, Minix, Xenix, Irix, Solaris와 같은 다른 운영 체제의 기본 파일 시스템을 지원합니다. 시스템 V, Windows 및 MS-DOS.[49]
2005년에 안정적인 팀은 사람들이 버그 수정 작업을 할 수 있는 커널 트리의 부족에 대한 대응으로 구성되었으며, 안정적인 버전을 계속 업데이트할 것입니다.[50] 2008년 2월 리눅스-넥스트 트리는 다음 개발 주기 동안 병합을 목표로 하는 패치가 모이는 장소 역할을 하도록 만들어졌습니다.[51][52] 여러 하위 시스템 유지 관리자는 다음 릴리스 사이클에 포함하기 위해 제출할 코드가 포함된 트리에 대해 접미사 -next를 채택했습니다. 2014년[update] 1월 현재 개발 중인 Linux 버전은 Linux-next라는 불안정한 지점에 있습니다.[53]
리눅스는 2002년 개발이 비트키퍼로 전환될 때까지 자동화된 소스 코드 관리 시스템의 도움 없이 유지되었습니다. 리눅스 개발자들은 자유롭게 사용할 수 있었지만 자유 소프트웨어는 아니었습니다. 2005년, 역설계를 위한 노력으로 인해 소프트웨어를 소유하고 있던 회사는 리눅스 커뮤니티의 지원을 취소했습니다. 이에 토르발스 등이 깃을 썼습니다. 새로운 시스템은 몇 주 안에 작성되었고, 두 달 만에 그것을 사용하여 만든 첫 번째 공식 커널이 출시되었습니다.[54]
2.6 커널 시리즈의 이력에 대한 자세한 내용은 kernel.org 의 2.6 커널 시리즈 소스 코드 릴리스 영역의 ChangeLog 파일에서 확인할 수 있습니다.
2011년 7월 토발즈는 3.0.0 커널 버전을 출시하면서 리눅스의 20주년을 기념했습니다.[39] 2.6이 8년 동안 버전 번호였기 때문에 3.x를 2.6.40+x로 보고하는 새로운 uname26 퍼스낼리티를 커널에 추가해야 이전 프로그램이 작동할 수 있었습니다.[56]
버전 3.0은 2011년 7월 22일에 출시되었습니다.[57] 2011년 5월 30일, 토르발스는 큰 변화가 "NOTHING. 절대적으로 아무것도"라고 발표하고 "...우리가 정말로 다음 출시를 완전히 새로운 반짝이는 숫자뿐만 아니라 좋은 커널로 만들자"고 요청했습니다.[58] 개발 과정에서 6~7주가 소요될 것으로 예상되며, 리눅스 20주년 즈음에 출시될 예정입니다.
2012년 12월 11일, 토르발스는 i386 프로세서의 지원을 제거함으로써 커널 복잡성을 줄이기로 결정했고, 3.7 커널 시리즈가 여전히 원래 프로세서를 지원하는 마지막 커널이 되었습니다.[59][60] ARM 프로세서에 대한 동일한 시리즈 통합 지원.[61]
2013년 9월 2일에 출시된 버전 3.11에는 새로운 기능과 같은 많은 새로운 기능이 추가되었습니다.[62] 임시 파일 취약성을 줄이기 위한 O_TMPFILE 플래그, 실험적 AMD Radeon 동적 전원 관리, 저지연 네트워크 폴링, zswap(압축 스왑 캐시)[63]
번호 변경은 2.6.39에서 3.0으로, 3.19에서 4.0으로 의미 있는 기술적 차별화를 수반하지 않았습니다. 메이저 버전 번호는 큰 마이너 번호를 피하기 위해 증가되었습니다.[57][64] 안정적인 3.x.y 커널은 2015년 2월 3.19까지 출시되었습니다.
2015년 4월, 토르발스는 커널 버전 4.0을 출시했습니다.[39] 2015년 2월까지 리눅스는 세계에서 가장 큰 소프트웨어 및 하드웨어 공급업체를 포함하여 1,200개 이상의 회사에서 거의 12,000명의 프로그래머로부터 기부를 받았습니다.[65] 2015년 6월에 출시된 리눅스 버전 4.1에는 거의 14,000명의 프로그래머가 기여한 1,950만 줄 이상의 코드가 포함되어 있습니다.[66]
총 1,991명의 개발자가 처음으로 협력한 사람들 중 334명이 버전 5.8에 553,000줄 이상의 코드를 추가하여 이전에 버전 4.9가 보유했던 기록을 깼습니다.[67]
스택 오버플로의 2019년 연간 개발자 설문조사에 따르면 전체 응답자의 53% 이상이 리눅스용 소프트웨어를, 약 27%가 안드로이드용 소프트웨어를 개발했지만,[68] 리눅스 기반 운영 체제에서는 약 25%만이 소프트웨어를 개발했습니다.[69]
대부분의 웹사이트들은 리눅스 기반의 운영체제에서 작동하며,[70][71] 세계에서 가장 강력한 500대 슈퍼컴퓨터들은 모두 리눅스 기반의 어떤 종류의 OS를 사용합니다.[72]
리눅스 배포판은 커널을 시스템 소프트웨어(예: GNU C 라이브러리, systemd 및 기타 유닉스 유틸리티 및 데몬)와 다양한 응용 소프트웨어와 번들로 제공하지만 데스크톱에서의 사용 점유율은 다른 운영 체제에 비해 낮습니다.
모바일 장치용 모든 운영 체제의 설치 기반의 대부분을 차지하는 Android는 리눅스 커널의 사용 증가와 [30]함께 다양한 임베디드 장치에서의 광범위한 사용에 책임이 있습니다.[73][74][75]
아키텍처 및 특징


리눅스는 모듈식 설계(즉, 런타임에 로드 가능한 커널 모듈을 삽입 및 제거할 수 있음)를 가진 단일 커널로,[12]: 338 [76] 한때 비자유 운영 체제의 폐쇄형 소스 커널에서만 사용할 수 있었던 대부분의 기능을 지원합니다. 이 글의 나머지 부분은 공식 매뉴얼 페이지에서 유닉스 및 유닉스 계열 운영 체제 규약을 사용하고 있습니다. 명령어, 인터페이스 및 기타 기능의 이름 뒤에 오는 숫자는 자신이 속한 섹션(즉, OS의 구성 요소 또는 기능 유형)을 지정하기 위한 목적을 가지고 있습니다(예: execve(2)는 시스템 호출을 의미하는 반면 exec(3)은 사용자 공간 라이브러리 래퍼를 나타냅니다). 다음 목록과 이어지는 섹션에서는 Linux 아키텍처 설계에 대한 비포괄적인 개요와 몇 가지 주목할 만한 기능에 대해 설명합니다.
- 동시 컴퓨팅 및 (실행 준비가 된 작업을 위한 충분한 CPU 코어의 가용성으로) SMP 및 NUMA 아키텍처에서 여러 프로세스를 한 번에 실제 병렬로 실행할 수도 있습니다(각 프로세스에는 하나 이상의 실행 스레드가 있습니다).
- 수백 개의 커널 기능 및 드라이버 선택 및 구성(make *config 명령어 패밀리 중 하나를 사용하여 컴파일을 실행하기 전),[16][15][14] 부팅 전 커널 파라미터 수정(일반적으로 GRUB2 메뉴의 행에 명령어 삽입), 실행 시간에 커널 동작을 미세 조정합니다(sysctl(8) 인터페이스를 사용하여 /proc/sys/).
- 선제적 멀티태스킹(사용자 모드 및 2.6 시리즈 이후)을 가능하게 하는 작업 스케줄러의 구성(make *config 명령어를 다시 사용) 및 정책의[77] 런타임 수정(nice(2), set priority(2) 및 sched_*(2) syscall 제품군을 통해) 커널 모드[78][79]); 완전 공정 스케줄러(CFS)는 2007년 이후 리눅스의 기본 스케줄러이며 O(log n) 시간 복잡도로 프로세스 정보(작업 구조)를 검색, 삽입 및 삭제할 수 있는 레드-블랙 트리를 사용합니다. 여기서 n은 실행 가능한 작업의 수입니다.[80][81]
- 페이징 가상 메모리를 사용한 고급 메모리 관리.
- 프로세스 간 통신 및 동기화 메커니즘.
- 여러 구체적인 파일 시스템(ext4, Btrfs, XFS, JFS, FAT32 등) 위에 있는 가상 파일 시스템.
- 구성 가능한 I/O 스케줄러, ioctl(2)[82] syscall은 특수 파일의 기본 장치 매개 변수를 조작합니다(인수, 반환 및 의미론은 해당 장치 드라이버에 따라 달라지므로 비표준 시스템 호출입니다), POSIX 비동기 I/O[83] 지원(단, 멀티 스레드 응용 프로그램의 확장성이 낮기 때문에), 리눅스 특정 I/O 시스템 호출 제품군(io_*(2))[84]은 동시 처리에 적합한 비동기 I/O 컨텍스트 관리를 위해 생성되어야 했습니다.
- OS 수준 가상화(Linux-VServer 사용), 병렬 가상화 및 하드웨어 지원 가상화(KVM 또는 Xen 사용, 하드웨어 에뮬레이션에 QEMU 사용)[85][86][87][88][89][90] Xen 하이퍼바이저에서 리눅스 커널은 리눅스 배포판을 구축할 수 있도록 지원합니다(예: 오픈).사용자의 가상 시스템(DomU)[91]에 대한 관리 환경을 제공하는 가상 시스템 호스트 서버인 Dom0으로 작동하는 SUSE Leap 등).
- VFIO 및 SR-IOV를 통한 I/O 가상화 VFIO(Virtual Function I/O)는 보안 메모리(IOMMU) 보호 환경에서 사용자 공간에 대한 직접적인 장치 액세스를 제공합니다. VFIO를 사용하면 VM 게스트가 VM 호스트 서버의 하드웨어 디바이스에 직접 액세스할 수 있습니다. 이 기법을 사용하면 전체 가상화 및 반가상화와 비교하여 성능이 향상됩니다. 그러나 VFIO를 사용하면 여러 VM 게스트와 디바이스를 공유할 수 없습니다. SR-IOV(Single Root I/O Virtualization)는 VFIO의 성능 향상과 여러 VM 게스트와 디바이스를 공유할 수 있는 기능을 결합합니다. 그러나 둘 이상의 VM 게스트에게 서로 다른 디바이스로 표시할 수 있는 특수 하드웨어가 필요합니다.[92]
- 임의적이고 의무적인 액세스 제어를 위한 보안 메커니즘(SELinux, AppArmor, POSIX ACL 등)[93][94]
- 여러 유형의 계층화된 통신 프로토콜(인터넷 프로토콜 제품군 포함).
- RPMsg 서브시스템을 통한 비대칭 다중 처리.
대부분의 장치 드라이버와 커널 확장은 커널 공간(많은 CPU 아키텍처에서 링 0)에서 실행되며 하드웨어에 대한 완전한 액세스 권한을 갖습니다. 일부 예외는 사용자 공간에서 실행됩니다. 주목할 만한 예로는 FUSE/CUSE를 기반으로 하는 파일 시스템과 UIO의 일부가 있습니다.[95][96] 또한 대부분의 사람들이 리눅스와 함께 사용하는 윈도우 시스템 및 디스플레이 서버 프로토콜인 X 윈도우 시스템 및 웨이랜드는 커널 내에서 실행되지 않습니다. 이와 달리 그래픽 카드의 GPU와 실제 인터페이스하는 것은 DRM(Direct Rendering Manager)이라는 커널 내 서브시스템입니다.
표준 모노리식 커널과 달리 장치 드라이버는 쉽게 모듈로 구성되고 시스템이 실행되는 동안 로드 또는 언로딩되며 하드웨어 인터럽트를 올바르게 처리하고 대칭 다중 처리를 더 잘 지원하기 위해 특정 조건에서 미리 사용할 수도 있습니다.[79] 선택적으로 Linux에는 안정적인 장치 드라이버 애플리케이션 바이너리 인터페이스가 없습니다.[97]
리눅스는 일반적으로 메모리 보호 및 가상 메모리를 사용하며 불균일한 메모리 액세스도 처리할 수 [98]있지만 프로젝트는 μClinux를 흡수하여 가상 메모리 없이 마이크로컨트롤러에서 리눅스를 실행하는 것도 가능합니다.[99]
하드웨어는 파일 계층에 표시됩니다. 사용자 응용 프로그램은 /dev or /sys 디렉토리의 항목을 통해 장치 드라이버와 상호 작용합니다.[100] 처리 정보도 /proc 디렉토리를 통해 파일 시스템에 매핑됩니다.[100]
Linux 내의 다양한 계층으로 사용자 영역과 커널 공간 사이의 분리를 보여줍니다.사용자 모드 | 사용자 응용프로그램 | bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, ... | ||||
---|---|---|---|---|---|---|
시스템 구성요소 | init 데몬: 오픈RC, 실행, systemd... | 시스템 데몬: polkitd, smbd, sshd, udvd... | 창 관리자: X11, 웨이랜드, 서피스플링어(안드로이드) | 그래픽: 메사, AMD Catalyst... | 기타 라이브러리: GTK, Qt, EFL, SDL, SFML, FLTK, GNUstep, ... | |
C 표준 라이브러리 | fopen , execv , malloc , memcpy , localtime , pthread_create ... (최대 2000개의 서브루틴)glibc는 빠르고, musl은 경량을 목표로 하며, uClibc는 임베디드 시스템을 목표로 하며, 바이오닉은 안드로이드용으로 작성되었습니다. 모두 POSIX/SUS 호환을 목표로 합니다. | |||||
커널 모드 | 리눅스 커널 | stat , splice , dup , read , open , ioctl , write , mmap , close , exit , 등 (약 380건의 시스템 호출)리눅스 커널 시스템 호출 인터페이스(SCI)는 POSIX/SUS[101] 호환을 목표로 합니다. | ||||
공정 스케줄링 서브시스템 | IPC 서브시스템 | 메모리 관리 서브시스템 | 가상 파일 하위 시스템 | 네트워킹 서브시스템 | ||
기타 구성 요소: ALSA, DRI, evdev, klibc, LVM, 장치 맵퍼, Linux Network Scheduler, Netfilter Linux 보안 모듈: SELinux, TOMOYO, AppArmor, Smack | ||||||
하드웨어(CPU, 메인 메모리, 데이터 저장 장치 등) |
인터페이스

리눅스는 유닉스의 복제품으로 POSIX 및 Single UNIX 규격 준수를 목표로 합니다.[102] 커널은 또한 리눅스 고유의 시스템 호출 및 기타 인터페이스를 제공합니다. 공식 커널에 포함되기 위해서는 코드가 일련의 라이센스 규칙을 준수해야 합니다.[6][11]
커널과 사용자 공간 사이의 Linux Application Binary Interface(ABI)는 4가지 안정성(안정성, 테스트, 구식, 제거)[103]을 갖지만, 이들에 의존하는 사용자 공간 프로그램을 깨지 않기 위해 시스템 호출은 절대 변경되지 않을 것으로 예상됩니다.[104]
적재 가능한 커널 모듈(LKM)은 설계상 안정적인 ABI에 의존할 수 없습니다.[97] 따라서 새 커널 실행 파일이 시스템에 설치될 때마다 항상 다시 컴파일해야 하며, 그렇지 않으면 로드되지 않습니다. 커널 실행 파일(vmlinux)의 필수 부분이 되도록 구성된 트리 내 드라이버는 빌드 프로세스에 의해 정적으로 연결됩니다.
또한 소스 수준의 커널 내 API의[97] 안정성에 대한 보장이 없으며, 이 때문에 다른 커널 하위 시스템의 코드뿐만 아니라 디바이스 드라이버 코드도 커널 진화에 따라 업데이트되어야 합니다. API를 변경하는 모든 개발자는 변경의 결과로 발생하는 코드를 수정해야 합니다.[105]
커널-투-유저스페이스 API
사용자 응용 프로그램에 노출된 인터페이스를 고려한 리눅스 커널 API 세트는 기본적으로 UNIX 및 리눅스 관련 시스템 호출로 구성됩니다.[106] 시스템 호출은 리눅스 커널의 진입점입니다.[107] 예를 들어, 리눅스 전용 제품 중에는 클론(2) 시스템 호출 제품군이 있습니다.[108] 대부분의 확장은 다음을 정의하여 활성화해야 합니다. _GNU_SOURCE
헤더 파일의 매크로 또는 사용자-랜드 코드가 컴파일되는 시점.[109]
시스템 호출은 링 0에서 권한이 없는 사용자 공간에서 권한이 있는 커널 공간으로 전환할 수 있도록 하는 어셈블리 명령을 사용해야만 호출할 수 있습니다. 이러한 이유로, C 표준 라이브러리(libC)는 대부분의 리눅스 시스템 호출에 래퍼 역할을 하며, 이는 필요 여부에 관계없이 [110]호출 프로세스를 대신하여 실행될 커널에 투명하게 들어갈 수 있는 C 기능을 노출시킵니다.[106] 빠른 사용자 공간 뮤텍스(futex)와 같이 libC에 의해 노출되지 않는 시스템 호출의 [111]경우 라이브러리는 명시적으로 호출하는 데 사용할 수 있는 syscall(2)이라는 기능을 제공합니다.[112]
의사 파일 시스템(예: sysfs 및 procfs 파일 시스템) 및 특수 파일(예: /dev/random
, /dev/sda
, /dev/tty
, 다른 많은 것들)은 하드웨어 또는 논리(소프트웨어) 장치를 나타내는 커널 데이터 구조에 대한 인터페이스의 또 다른 계층을 구성합니다.[113][114]
커널 대 사용자 공간 ABI
수백 개의 다양한 리눅스 OS 구현 간에 존재하는 차이점 때문에 실행 가능한 개체는 특정 하드웨어 아키텍처에서 실행하기 위해 컴파일, 조립 및 연결되어 있지만(즉, 대상 하드웨어의 ISA를 사용함) 다른 리눅스 배포판에서 실행할 수 없는 경우가 많습니다. 이 문제는 주로 리눅스 커널의 코드에 적용되는 배포별 구성 및 패치 세트, 시스템 라이브러리, 서비스(데몬), 파일 시스템 계층 및 환경 변수의 차이로 인해 발생합니다.
리눅스 배포판의 응용 프로그램 및 바이너리 호환성에 관한 주요 표준은 리눅스 표준 베이스(LSB)입니다.[115][116] 그러나 LSB는 데스크톱 사양, X 라이브러리 및 Qt를 정의하기 때문에 리눅스 커널에 관한 것을 넘어서고 있습니다.[117] LSB 버전 5는 여러 표준 및 초안(POSIX, SUS, X/Open, 파일 시스템 계층 구조(FHS) 등)을 기반으로 합니다.[118]
커널과 관련된 부분은 일반 ABI([119]gABI), 특히 시스템 V ABI와[120][121] ELF(Executable and Linking Format),[122][123] 프로세서 고유 ABI(psABI) 등입니다. 예를 들어 X86-64의 핵심 사양입니다.[124][125]
x86_64 사용자 프로그램이 시스템 호출을 호출하는 방법에 대한 표준 ABI는 syscall 번호를 rax 레지스터에 로드하고 다른 매개 변수를 rdi, rsi, rdx, r10, r8 및 r9에 로드하고 마지막으로 syscall 어셈블리 명령을 코드에 넣는 것입니다.[126][127][128]
커널 내 API

서로 다른 하위 시스템 사이에는 여러 커널 내부 API가 사용됩니다. 일부는 커널 서브시스템 내에서만 사용할 수 있는 반면, 다소 제한된 커널 내 심볼(예: 변수, 데이터 구조 및 함수) 집합은 동적으로 로드 가능한 모듈(예: 요청에 따라 로드된 장치 드라이버)가 EXPORT_SYMBol() 및 EXPORT_SYMBol_GPL() 매크로로[130][131] 내보냈는지 여부(후자는 GPL 호환 라이센스로 릴리스된 모듈로 예약됨).[132]
리눅스는 적어도 리눅스 버전 2.6 이후 안정적으로 유지된 데이터 구조(예: 링크된 목록, 래딕스 트리,[133] 레드 블랙 트리,[134] 큐)를 조작하거나 공통 루틴(예: 사용자 공간에서 데이터 복사, 메모리 할당, 시스템 로그에 인쇄 라인 등)을 수행하는 커널 내 API를 제공합니다.[135][136][137]
인커널 API에는 디바이스 드라이버가 사용하는 낮은 수준의 공통 서비스 라이브러리가 포함되어 있습니다.
- SCSI 인터페이스 및 libATA – 각각 USB, SATA, SAS, 파이버 채널, FireWire, ATAPI 장치 [138]및 [S]를 지원하는 커널 내 라이브러리에 연결된 스토리지 장치를 위한 P2P 패킷 기반 통신 프로토콜ATA 호스트 컨트롤러 및 장치.[139]
- DRM(Direct Rendering Manager) 및 KMS(Kernel Mode Setting) – GPU와 인터페이스하고 최신 3D 가속 비디오 하드웨어의 요구사항을 지원하며 [140]화면 해상도, 색상 깊이 및 새로 고침 빈도를[141] 설정하기 위한 용도
- DMA 버퍼(DMA-BUF) – 하드웨어 직접 메모리 액세스를 위한 버퍼를 여러 장치 드라이버 및 하위[142][143][144] 시스템 간에 공유하기 위한 용도
- Video4Linux – 비디오 캡처 하드웨어용
- 고급 Linux 사운드 아키텍처(ALSA) – 사운드 카드용
- 새로운 API – 네트워크 인터페이스 컨트롤러용
- mac80211 및 cfg80211 – 무선 네트워크 인터페이스 컨트롤러용[145][146]
In-kernel ABI
리눅스 개발자들은 커널 내 ABI를 안정적으로 유지하지 않기로 결정했습니다. 커널의 특정 버전에 대해 컴파일된 모듈은 커널 내 API가 소스 수준에서 동일하게 유지되었다고 가정할 때 다시 컴파일되지 않고는 다른 버전으로 로드할 수 없습니다. 그렇지 않으면 모듈 코드도 그에 따라 수정해야 합니다.[97]
프로세스 및 스레드
![]() | 이 섹션은 독자들에게 혼란스럽거나 불분명할 수 있습니다. 특히 전체 모델을 설명하는 것은 거의 없으며 명확한 컨텍스트를 제공하지 못할 것으로 보이는 미세한 기술 인터페이스 세부 정보에 중점을 둡니다. (2023년 7월) (본 및 |
Linux는 클론(2) 또는 새로운 클론3(2)[147] 시스템 호출을 통해 프로세스를 만듭니다. 주어진 매개변수에 따라 새 엔티티는 호출자의 리소스 대부분을 공유하거나 공유하지 않을 수 있습니다. 이러한 syscall은 새로운 독립 프로세스(각각 커널 공간의 task_struct 데이터 구조 내에 TGID라는 특수 식별자를 갖지만 사용자 공간에서는 PID라고 함)부터 호출 프로세스 내의 새로운 실행 스레드(CLON_THREAD 파라미터를 사용함)에 이르기까지 다양한 새로운 엔티티를 생성할 수 있습니다. 이 후자의 경우 새 엔티티는 호출 프로세스의 동일한 TGID를 소유하고 결과적으로 사용자 공간에서도 동일한 PID를 갖습니다.[148][149]
실행 파일이 공유 라이브러리에 동적으로 연결된 경우 동적 링커(ELF 개체의 경우 일반적으로 /lib/ld-linux.so .2)를 사용하여 필요한 개체를 찾고 로드한 다음 실행할 프로그램을 준비한 다음 실행합니다.
NPTL로 간단히 알려진 네이티브 POSIX 스레드 라이브러리는 사용자 공간에 표준 POSIX 스레드 인터페이스(pthreads)를 제공합니다.[151][152] pthread_create(3) POSIX 인터페이스를 사용하여 새 스레드를 생성할 [153]때마다 시스템 호출의 클론(2) 계열에는 새 스레드가 점프해야 하는 함수의 주소도 지정되어야 합니다. 리눅스 커널은 빠른 사용자 공간 잠금 및 동기화를 위한 futex(7)(빠른 사용자 공간 뮤텍스의 약자) 메커니즘을 제공합니다.[154] 대부분의 작업은 사용자 공간에서 수행되지만 futex(2) 시스템 호출을 사용하여 커널과 통신해야 할 수도 있습니다.[111]
스레드의 매우 특별한 범주는 소위 커널 스레드입니다. 위에서 언급한 사용자 프로세스 실행 스레드와 혼동해서는 안 됩니다. 커널 스레드는 커널 공간에만 존재하며 커널 태스크를 동시에 실행하는 것이 유일한 목적입니다.[155]
이와 달리 독립적인 프로세스가 생성될 때마다 시스템 호출은 부모 프로세스와 자식 프로세스(즉, 하나의 프로그램, 두 개의 프로세스)에서 동시에 동일한 프로그램의 다음 명령으로 정확하게 돌아갑니다. 서로 다른 반환 값(프로세스당 하나)을 사용하면 프로그램이 현재 실행 중인 두 프로세스 중 어느 프로세스를 알고 있는지 알 수 있습니다. 프로세스 복제 후 몇 단계가 지난 자식 프로세스는 일반적으로 exec(2) 시스템 호출을 호출하고 호출 프로세스에서 현재 실행 중인 프로그램을 새로 초기화된 스택, 힙으로 대체하기 때문에 프로그램에는 이 정보가 필요합니다. (initial화 및 초기화되지 않은) 데이터 세그먼트. 이 작업이 완료되면 두 개의 다른 프로그램을 실행하는 두 개의 프로세스가 발생합니다.
유효한 사용자 ID(euid)와 유효한 그룹 ID(egid)에 따라 사용자 0 권한(루트, 시스템 관리자, 식별자 0 소유)으로 실행되는 프로세스는 모든 것을 수행할 수 있지만, 0이 아닌 사용자 프로세스는 수행할 수 없습니다. 기능(7)은 전통적으로 슈퍼유저와 관련된 권한을 별개의 단위로 나누며, 이는 부모 프로세스에 의해 독립적으로 활성화 및 비활성화되거나 자식 자체에 의해 삭제될 수 있습니다.[157]
예약 및 선취
Linux 프로세스 스케줄러는 다양한 스케줄링 클래스와 정책을 가능하게 한다는 점에서 모듈식입니다.[158][159] 스케줄러 클래스는 기본 스케줄러 코드에 등록할 수 있는 플러그형 스케줄러 알고리즘입니다. 각 클래스는 다양한 유형의 프로세스를 예약합니다. 스케줄러의 핵심 코드는 우선 순위 순서에 따라 각 클래스에서 반복되며 실행 준비가 된 sched_entity 유형의 스케줄링 가능한 엔티티를 가진 가장 높은 우선 순위의 스케줄러를 선택합니다.[12]: 46–47 엔티티는 스레드, 스레드 그룹 및 특정 사용자의 모든 프로세스일 수 있습니다.
Linux는 사용자 우선권과 전체 커널 우선권을 모두 제공합니다.[12]: 62–63 선점은 지연 시간을 줄이고 응답성을 높이며,[160] Linux를 데스크톱 및 실시간 애플리케이션에 보다 적합하게 만듭니다.
일반 작업의 경우 기본적으로 커널은 커널 2.6.23 버전에 도입된 CFS(완전 공정 스케줄러) 클래스를 사용합니다.[80] 내부적으로 이 기본 스케줄러 클래스는 C 헤더의 매크로에서 다음과 같이 정의됩니다. SCHED_NORMAL
. 다른 POSIX 커널에서는 다음과 같은 유사한 정책이 있습니다. SCHED_OTHER
CPU 타임슬라이스를 할당합니다(즉, 각 프로세스의 미리 결정된 우선 순위 또는 동적으로 계산된 우선 순위에 따라 프로세서 시간의 절대 슬라이스를 할당합니다). 리눅스 CFS는 절대 타임슬라이스를 없애고 실행 가능한 프로세스의 총 수와 이미 실행된 시간과 같은 매개 변수의 함수로 CPU 시간의 상당한 비율을 할당합니다. 이 함수는 또한 상대적 우선 순위(nice 값)에 따라 달라지는 일종의 가중치를 고려합니다.[12]: 46–50
사용자 우선권을 사용하면 커널 스케줄러는 컨텍스트 스위치를 다른 것으로 실행하는 것으로 현재 프로세스를 대체할 수 있으며 따라서 실행을 위한 컴퓨팅 리소스(CPU, 메모리 등)를 획득합니다. 이것은 CFS 알고리즘(특히 엔티티 정렬에 vruntime이라는 변수를 사용한 다음 vruntime이 더 작은 것, 즉 CPU 시간의 공유가 가장 적은 스케줄링 가능한 엔티티를 활성 스케줄러 정책과 상대적 우선순위에 따라 선택합니다.[161] 커널 선점을 통해 커널은 인터럽트 핸들러가 돌아올 때, 커널 작업이 차단될 때, 그리고 하위 시스템이 schedule() 함수를 명시적으로 호출할 때마다 그 자체를 선점할 수 있습니다.
커널에는 이름이 지정된 두 개의 POSIX 호환[162] 실시간 스케줄링 클래스도 포함되어 있습니다. SCHED_FIFO
(실시간 선입선출) 및 SCHED_RR
(realtime round-robin), 둘 다 기본 클래스보다 우선합니다. 다음과 같이 알려진 추가 스케줄링 정책 SCHED DEADLINE
, 2014년 3월 30일에 출시된 커널 버전 3.14에서 가장 빠른 데드라인 퍼스트 알고리즘(EDF)을 구현하는 것이 추가되었습니다.[163][164] SCHED_DEADLINE
다른 모든 스케줄링 클래스보다 우선합니다.
실시간 PREEMPT_RT
버전 2.6 이후 메인라인 리눅스에 포함된 패치는 결정론적 스케줄러, 선점 및 인터럽트 제거(가능한 경우), PI Mutexes(즉, 우선순위 반전을 방지하는 프리미티브 잠금),[165][166] HPET(High Precision Event Timers) 지원, RCU(Preemptive Read-Copy-Update), (강제) IRQ 스레드를 제공합니다. 그리고 다른 사소한 특징들도.[167][168][169]
2023년 Peter Zijlstra는 CFS의 "지연성이 좋은" 패치의 필요성을 방지하기 [170][171]위해 CFS를 가장 이른 자격이 있는 가상 마감 우선 스케줄링(EEVDF) 스케줄러로 대체할 것을 제안했습니다.[172] EEVDF 스케줄러는 리눅스 커널 버전 6.6에서 CFS를 대체했습니다.[173]
동시성 및 동기화
커널은 동시성의 다양한 원인(예: 인터럽트, 하단 절반, 커널과 사용자 작업의 선점, 대칭 다중 처리)을 가지고 있습니다.[12]: 167 리눅스는 중요한 영역(원자적으로 실행되어야 하는 코드 섹션), 공유 메모리 위치(글로벌 변수 및 글로벌 범위를 가진 다른 데이터 구조 등), 하드웨어에 의해 비동기적으로 수정 가능한 메모리 영역(예: C 유형 한정자 포함)을 보호하기 위해 대규모 도구 세트를 제공합니다. 이들은 원자 유형(특정 연산자 집합에서만 조작할 수 있음), 스핀록, 세마포어, 뮤텍스 [174][12]: 176–198 [175]및 잠금 없는 알고리즘(예: RCU)으로 구성됩니다.[176][177][178] 대부분의 잠금 없는 알고리즘은 메모리 순서를 강제하고 컴파일러 최적화로 인해 원하지 않는 부작용을 방지하기 위해 메모리 장벽 위에 구축됩니다.[179][180][181][182]
PREEMPT_RT
메인라인 리눅스에 포함된 코드는 선점을 비활성화하지 않고 우선순위 상속을 지원하는 특수한 종류의 뮤텍스인 RT-뮤텍스를 제공합니다.[183][184] 실시간 작동을 위해 구성 사용 시 거의 모든 잠금 장치가 슬립 잠금 장치로 변경됩니다.[185][169][184]우선 순위 상속은 우선 순위가 낮은 작업을 허용함으로써 우선 순위가 높은 웨이터의 우선 순위를 해당 잠금이 해제될 때까지 유지합니다.[186][187]
Linux에는 Lockdep이라는 커널 잠금 검증기가 포함되어 있습니다.[188][189]
관리를 중단합니다.
인터럽트의 관리는 단일 작업으로 볼 수 있지만 두 부분으로 나뉩니다. 이러한 분할은 서로 다른 시간 제약과 관리가 구성된 태스크의 동기화 요구에 기인합니다. 첫 번째 부분은 리눅스에서 상위 절반으로 알려진 비동기 인터럽트 서비스 루틴으로 구성되며, 두 번째 부분은 하위 절반의 세 가지 유형 중 하나(softirq, tasklet, work queue)로 수행됩니다.[12]: 133–137 Linux 인터럽트 서비스 루틴이 중첩될 수 있습니다(즉, 새로운 IRQ는 다른 하위 우선 순위 ISR을 선점하는 높은 우선 순위 ISR로 트랩할 수 있습니다).
메모리 관리
리눅스에서의 메모리 관리는 복잡한 주제입니다. 우선, 커널은 페이지 가능하지 않습니다(즉, 항상 물리적 메모리에 상주하며 디스크로 스왑할 수 없습니다). 커널에는 메모리 보호 기능이 없기 때문에(사용자 공간과는 달리 SIGSEGV 신호가 없음), 메모리 위반은 불안정과 시스템 충돌로 이어집니다.[12]: 20
리눅스는 4개 및 5개 수준의 페이지 테이블로 가상 메모리를 구현합니다. 전술한 바와 같이 사용자 메모리 공간만 항상 호출 가능합니다. 부팅 직후에 채워지고 종료될 때까지 유지되는 적절한 데이터 구조(타입 구조 페이지)의 RAM의 각 페이지 프레임에 대한 정보를 가상 페이지와 연결 여부에 관계없이 유지합니다. 또한 아키텍처 종속 제약 조건 및 용도에 따라 구역의 모든 페이지 프레임을 분류합니다. 예를 들어, DMA 작업을 위해 예약된 페이지는 ZONE_DMA에 있고, 가상 주소에 영구적으로 매핑되지 않은 페이지는 ZONE_HIGHMEM에 있습니다(x86_32 아키텍처에서 이 영역은 896MB 이상의 물리적 주소에 대한 것이지만, x86_64는 x86_64가 상위 주소에 있는 물리적 페이지를 영구적으로 매핑할 수 있기 때문에 필요하지 않습니다). (사용률이 낮은 다른 분류를 제외하고) 남은 것은 ZONE_NORMAL뿐입니다.
작은 메모리 덩어리는 다음 제품군을 통해 동적으로 할당할 수 있습니다. kmalloc()
API 및 적절한 변형을 통해 해방됨 kfree()
. vmalloc()
그리고. kvfree()
가상으로 연속된 큰 청크에 사용됩니다. alloc_pages()
원하는 개수의 전체 페이지를 할당합니다.

커널에는 구성 가능한 대안으로 SLAB, SLUB 및 SLOB 할당기가 포함됩니다.[191][192] SLUB는 최신 제품이며 기본 할당기이기도 합니다. 단순성과 효율성을 지향하며,[192] PREEMPT_RT
궁합이 [193]맞는 SLOB 할당기는 나중에 리눅스 6.4에서 제거되었으며,[194] SLAB 할당기는 리눅스 6.5에서 제거될 계획이며, 남은 할당기는 리눅스 2.6부터 사용할 수 있는 할당기인 SLUB뿐입니다.[195]
지원되는 아키텍처

원래 휴대용으로 설계된 것은 아니지만,[22][196] 리눅스는 현재 ARM 아키텍처부터 IBM z/Architecture 메인프레임 컴퓨터에 이르기까지 다양한 시스템에서 실행되는 가장 널리 이식된 운영 체제 커널 중 하나입니다. 첫 번째 포트는 모토로라 68000 플랫폼에서 수행되었습니다. 이 커널에 대한 수정은 매우 기본적이어서 토르발스는 모토로라 버전을 포크와 "리눅스 같은 운영 체제"로 간주했습니다.[196] 그러나 이로 인해 Torvalds는 더 많은 컴퓨팅 아키텍처로의 포팅을 용이하게 하기 위해 코드의 주요 재구성을 주도하게 되었습니다. 단일 소스 트리에서 i386 이상의 코드를 가진 최초의 리눅스는 DEC Alpha AXP 64비트 플랫폼을 지원했습니다.[197][198][196]
리눅스는 IBM의 서밋(Summit)에서 메인 운영 체제로 실행되며, 2019년[update] 10월 현재 세계에서 가장 빠른 500대 슈퍼컴퓨터 모두 리눅스 커널을 기반으로 일부 운영 체제를 실행하며,[13] 이는 1998년 최초의 리눅스 슈퍼컴퓨터가 목록에 추가된 것과 크게 달라진 것입니다.[199]
리눅스는 또한 애플의 아이폰 3G와 아이팟과 같은 다양한 휴대용 장치에 이식되었습니다.[200]
지원되는 장치
2007년에 리눅스 커널에서 알려진 하드웨어 및 프로토콜의 포괄적인 데이터베이스를 구축하기 위해 LKDDb 프로젝트가 시작되었습니다.[201] 데이터베이스는 커널 소스의 정적 분석에 의해 자동으로 구축됩니다. 이후 2014년, 리눅스 하드웨어 프로젝트는 다양한 리눅스 배포판 사용자의 도움을 받아 테스트된 모든 하드웨어 구성의 데이터베이스를 자동으로 수집하기 위해 시작되었습니다.[202]
실시간 패치 적용
![]() | 이 섹션을 업데이트해야 합니다.(2023년 9월) |
Ksplice, kpatch 및 kGraft와 같은 라이브 패치 기술을 사용하여 재부팅 없는 업데이트를 커널에 적용할 수도 있습니다. 라이브 커널 패치를 위한 미니멀리즘 기반은 2015년 4월 12일에 출시된 커널 버전 4.0의 리눅스 커널 메인라인으로 병합되었습니다. 라이브패치로 알려져 있으며 주로 커널의 ftrace 기능을 기반으로 하는 이러한 기반은 kGraft와 kpatch 모두에서 핫 패치를 지원할 수 있는 공통 코어를 형성합니다. 핫 패치가 포함된 커널 모듈을 위한 API(Application Programming Interface)와 사용자 공간 관리 유틸리티를 위한 ABI(Application Binary Interface)를 제공합니다. 그러나 Linux 커널 4.0에 포함된 공통 코어는 x86 아키텍처만 지원하며 핫 패치가 적용되는 동안 기능 수준의 일관성을 보장하는 메커니즘을 제공하지 않습니다. 2015년[update] 4월 현재 리눅스 커널 메인라인에서 제공하는 공통 라이브 패치 코어에 kpatch와 kGraft를 포팅하는 작업이 진행 중입니다.[203][204][205]
보안.
커널 버그는 잠재적인 보안 문제를 나타냅니다. 예를 들어 권한 상승을 허용하거나 서비스 거부 공격 벡터를 생성할 수 있습니다. 수년에 걸쳐 시스템 보안에 영향을 미치는 수많은 버그가 발견되고 수정되었습니다.[206] 커널의 보안을 향상시키기 위해 새로운 기능이 자주 구현됩니다.[207][208]
기능(7)은 프로세스 및 스레드에 대한 섹션에서 이미 소개했습니다. Android는 이를 활용하고 systemd는 관리자에게 프로세스의 기능에 대한 자세한 제어를 제공합니다.[209]
Linux는 커널 공격 표면을 줄이고 보안을 개선하기 위한 다양한 메커니즘을 제공하며, 이를 총칭하여 Linux 보안 모듈(LSM)이라고 합니다.[210] 이들은 원래 NSA에 의해 개발되었다가 일반에 공개된 코드인 SELinux(보안 강화 리눅스) 모듈과 AppArmor[94] [211]등으로 구성됩니다. SELinux는 현재 GitHub에서 활발히 개발 및 유지 관리되고 있습니다.[93] SELinux와 AppArmor는 복잡성과 범위에서 크게 다르지만 MAC(의무 액세스 제어)을 비롯한 액세스 제어 보안 정책을 지원합니다.
또 다른 보안 기능은 매개 변수를 필터링하고 사용자-랜드 응용 프로그램이 사용할 수 있는 시스템 호출 집합을 줄이는 방법으로 작동하는 Seccomp BPF(SECURE COMPTING with Berkeley Packet Filters)입니다.[212]
비평가들은 커널 개발자들이 보안 결함을 은폐하거나 최소한 발표하지 않았다고 비난했습니다. 2008년, 라이너스 토르발스는 다음과 같이 이에 대응했습니다.[213][214]
저는 개인적으로 보안 버그를 "일반 버그"로 생각합니다. 그들을 은폐하지는 않지만, 그들을 추적하여 특별한 것으로 발표하는 것이 좋은 생각이라고 생각할 이유도 없습니다... 제가 보안 서커스단 전체에 신경 쓰지 않는 한 가지 이유는 그것이 잘못된 행동을 미화하고, 따라서 격려한다고 생각하기 때문입니다. 일반 버그만 고치지 않는 사람들이 그렇게 중요하지 않은 것처럼 보안 요원들을 "영웅"으로 만듭니다. 사실 지루한 일반 벌레들이 훨씬 더 많다는 이유만으로 훨씬 더 중요합니다. 어떤 화려한 보안 구멍이 잘못된 잠금으로 인한 무작위의 화려한 충돌보다 더 "특별한" 것으로 미화되거나 관심을 가져서는 안 된다고 생각합니다.
리눅스 배포판은 일반적으로 리눅스 커널의 취약성을 수정하기 위해 보안 업데이트를 공개합니다. 많은 경우 특정 리눅스 커널 버전에 대해 장기간 보안 업데이트를 받는 장기 지원 릴리스를 제공합니다.
발전
![]() | 기술적인 문제로 인해 그래프를 사용할 수 없습니다. Fabricator 및 MediaWiki.org 에 대한 자세한 정보가 있습니다. |
개발자 커뮤니티
리눅스 커널 개발자 커뮤니티는 약 5000~6000명의 회원으로 구성되어 있습니다. Linux Foundation이 발표한 "2017 State of Linux Kernel Development"에 따르면, 릴리스 4.8에서 4.13까지의 커밋을 다루는 연구에 따르면, 평균적으로 약 200-250개의 회사에서 약 1500명의 개발자가 기여하고 있었습니다. 상위 30개 개발자가 코드의 16%를 조금 넘었습니다. 기업의 경우 인텔(13.1%)과 레드햇(7.2%), 리나로(5.6%), IBM(4.1%)이 1위를 차지했고, 2위와 5위는 '없음'(8.2%)과 '알 수 없음'(4.1%) 부문이 차지했습니다.[216]
로드맵 대신 기술 지침이 있습니다. 중앙 자원 할당 대신 리눅스 커널의 추가 개발에 대해 서로 독립적으로 모든 사람과 회사가 지분을 가지고 있습니다. Linus Torvalds와 같은 사람들과 저는 커널 진화를 계획하지 않습니다. 우리는 거기에 앉아서 향후 2년 동안의 로드맵을 생각하지 않고 다양한 새로운 기능에 리소스를 할당합니다. 자원이 없기 때문입니다. 리소스는 모두 Linux를 사용하고 기여하는 다양한 기업과 다양한 독립 기여자가 소유하고 있습니다. 자원을 소유한 사람들이 결정하는 겁니다...
— Andrew Morton, 2005
많은 대규모 오픈 소스 소프트웨어 프로젝트와 마찬가지로 개발자는 소수 기여자에 대한 괴롭힘을 해결하기 위한 행동 강령인 기여자 규약을 준수해야 합니다.[217][218] 또한, 공격을 방지하기 위해 소스 코드 내의 포괄적인 용어 사용이 의무화됩니다.[219]
소스코드관리
리눅스 개발 커뮤니티는 Git를 사용하여 소스 코드를 관리합니다. 깃 사용자는 최신 버전의 토르발스 트리를 git-clone(1)[220]으로 복제하고 git-pull(1)을 사용하여 최신 상태로 유지합니다.[221][222] 기여는 LKML(그리고 종종 특정 하위 시스템 전용 다른 메일링 목록)의 텍스트 메시지 형태로 패치로 제출됩니다. 패치는 일련의 규칙과 삭제할 코드 행 및 지정된 파일에 추가할 코드 행을 설명하는 형식 언어를 준수해야 합니다. 이러한 패치는 시스템 관리자가 코드를 약간만 변경하거나 다음 버전으로 점진적으로 업그레이드하기 위해 적용할 수 있도록 자동으로 처리할 수 있습니다.[223] 리눅스는 GNU zip(gzip) 및 bzip2 형식으로도 배포됩니다.
커널에 코드를 제출하는 중
리눅스 커널을 변경하려는 개발자는 그 변경 사항을 개발하고 테스트하는 것부터 시작합니다. 변경 사항의 중요성과 변경되는 하위 시스템의 수에 따라 변경 사항은 단일 패치로 제출되거나 소스 코드의 여러 패치로 제출됩니다. 단일 유지 관리자에 의해 유지 관리되는 단일 하위 시스템의 경우 이러한 패치는 Cc의 적절한 메일링 목록과 함께 하위 시스템 유지 관리자에게 이메일로 전송됩니다. 관리자와 메일링 목록의 독자는 패치를 검토하고 피드백을 제공합니다. 검토 프로세스가 완료되면 하위 시스템 유지 관리자는 관련 Git 커널 트리의 패치를 받아들입니다. Linux 커널에 대한 변경 사항이 충분히 중요한 버그 수정인 경우 패치에 대한 풀 요청이 며칠 내에 Torvalds로 전송됩니다. 그렇지 않으면 다음 병합 창에서 Torvalds로 풀 요청이 전송됩니다. 병합 창은 일반적으로 2주 동안 지속되며 이전 커널 버전이 출시된 직후에 시작됩니다.[224] Git 커널 소스 트리는 크레딧 디렉토리에서 리눅스 커널에 기여한 모든 개발자의 이름을 지정하고 모든 하위 시스템 유지 관리자는 유지 관리자에 나열됩니다.[225]
프로그래밍 언어 및 코딩 스타일
리눅스는 GCC가 지원하는 특별한 C 프로그래밍 언어로 작성되며, 이 컴파일러는 여러 가지 방법으로 C 표준을 확장하는 컴파일러입니다. 예를 들어, 대상 아키텍처의 어셈블리 언어(GCC의 "AT&T 스타일" 구문)로 작성된 코드의 인라인 섹션을 사용합니다. 2002년부터 모든 코드는 리눅스 커널 코딩 스타일로 구성된 21개 규칙을 준수해야 합니다.[226][227]
2021년 9월 리눅스 커널을 컴파일하고 구축하기 위한 GCC 버전 요구사항이 GCC 4.9에서 5.1로 증가하여 2022년 3월 표준으로의 마이그레이션이 이루어지면서 커널의 잠재력이 C89 표준에 기반한 C 코드를 사용하는 것에서 C11 표준으로 작성된 코드를 사용하는 것으로 이동할 수 있게 되었습니다.[228] 리눅스 5.[229]18 출시와 함께.
러스트 프로그래밍 언어에 대한 초기 지원은 2022년 12월에 출시된 리눅스 6.1에서[5] 추가되었으며,[230] 이후 리눅스 6.2 및 리눅스 6.3과 같은 커널 버전이 추가되어 지원이 더욱 향상되었습니다.[231][232]
GNU 툴체인
GNU 컴파일러 모음(GCC 또는 GNU cc)은 메인라인 리눅스 소스의 기본 컴파일러이며 make라는 유틸리티로 호출됩니다. 그런 다음 GNU 어셈블러(GAS 또는 GNU as라고 더 많이 함)는 GCC 생성된 어셈블러 코드에서 개체 파일을 출력합니다. 마지막으로 GNU 링커(GNULD)를 사용하여 정적으로 연결된 실행 가능한 커널 파일인 vmlinux를 생성합니다. as와 ld는 모두 GNU 바이너리 유틸리티(binutils)의 일부입니다. 위에서 언급한 도구는 GNU 도구 체인으로 통칭됩니다.
컴파일러 호환성
GCC는 오랫동안 리눅스를 올바르게 구축할 수 있는 유일한 컴파일러였습니다. 2004년 인텔은 C 컴파일러도 컴파일할 수 있도록 커널을 수정했다고 주장했습니다.[233] 수정된 2.6.22 버전으로 2009년에 또 다른 성공이 보고되었습니다.[234][235] 인텔 컴파일러에 대한 지원은 2023년에 중단되었습니다.[236]
2010년부터 C 언어의 대체 컴파일러인 Clang과 함께 Linux를 구축하려는 노력이 진행되고 있습니다.[237] 2014년 4월 12일 현재 공식 커널은 Clang에 의해 거의 컴파일될 수 있습니다.[238][239] 이 작업에 전념하는 프로젝트는 Clang이 구축된 LLVM 컴파일러 인프라의 이름을 따서 LLVMLinux로 명명됩니다.[240] LLVMLinux는 Linux 또는 LLVM을 포크하는 것을 목표로 하지 않으므로 결국 업스트림 프로젝트에 제출되는 패치로 구성된 메타 프로젝트입니다. 개발자는 Clang에서 Linux를 컴파일할 수 있도록 함으로써 컴파일 시간이 단축되는 이점을 얻을 수 있습니다.[241]
2017년 개발자들은 4.15 릴리스에서 Clang과 함께 리눅스 커널 구축을 지원하기 위한 업스트림 패치를 완료했으며, X86-64 및 AArch64에 대한 지원을 안정 커널 트리의 4.4, 4.9 및 4.14 분기에 보고했습니다. 구글의 픽셀 2는 첫 번째 Clang 빌드 리눅스 커널과 함께 제공되었지만 [242]픽셀(1세대)용 패치가 존재했습니다.[243] 2018년에는 Chrome을 보았습니다OS는 기본적으로 클랑과 커널을 구축하는 것으로 이동하고,[244] 안드로이드(운영 체제)는 2019년에 클랑과[245] LLVM의 링커 LLD를[246] 커널 구축에 필요하게 만들었습니다. Google은 2020년에 데이터 센터 전체에서 사용되는 프로덕션 커널을 Clang과 함께 구축하도록 이전했습니다.[247] 오늘날 ClangBuiltLinux 그룹은 호환성을 보장하기 위해 Linux와 LLVM 모두를 조정합니다. 둘 다 LLVMLinux의 멤버로 구성되고 LLVMLinux의 업스트림 패치를 가지고 있습니다.
커널 디버깅

Linux 커널과 관련된 버그는 문제 해결이 어려울 수 있습니다. 이는 커널이 사용자 공간 및 하드웨어와 상호 작용하기 때문이며, 또한 사용자 프로그램과 비교할 때 더 넓은 범위의 이유에서 발생할 수 있기 때문입니다. 근본적인 원인으로는 코드의 의미 오류, 동기화 프리미티브의 오용, 잘못된 하드웨어 관리 등이 있습니다.[12]: 364
커널의 치명적이지 않은 버그에 대한 보고를 "웁스"라고 하며, 이러한 리눅스 커널의 올바른 동작과의 편차는 신뢰성을 손상시키면서 계속 작동할 수 있습니다.[248]
패닉() 기능을 통해 중대하고 치명적인 오류가 보고됩니다. 메시지를 인쇄한 다음 커널을 중단합니다.[12]: 371
코드의 버그를 알아내는 데 사용되는 가장 일반적인 기술 중 하나는 인쇄에 의한 디버깅입니다. 이를 위해 리눅스는 메시지를 원형 버퍼에 저장하는 printk()라는 커널 내 API를 제공합니다. syslog(2) 시스템 호출은 커널 메시지 링 버퍼의 읽기 및/또는 지우기 및 콘솔로 보낼 메시지의 최대 로그 레벨 설정(즉, 보고된 상태의 심각도를 알려주는 printk()의 8개 KERN_* 매개변수 중 하나)에 사용되며, 일반적으로 glibC 래퍼 klogctl(3)을 통해 호출됩니다.[249] 커널 메시지는 또한 /dev/kmsg 인터페이스를[250] 통해 사용자 국가로 내보냅니다(예: systemd-journald는[251][252] 해당 인터페이스를 읽고 기본적으로 메시지를 /var/log/journal에 추가합니다).
실행 중인 커널을 디버깅하기 위한 또 다른 기본적인 기술은 추적입니다. ftrace 메커니즘은 리눅스 내부 추적기이며 런타임에 리눅스를 모니터링하고 디버깅하는 데 사용되며 커널 오동작으로 인한 사용자 공간 지연을 분석할 수도 있습니다.[253][254][255][256] 또한 ftrace를 사용하면 부팅 시 Linux를 추적할 수 있습니다.[257]
kprobe와 kretprobe는 (사용자 공간의 디버거처럼) Linux에 침입하여 중단 없이 정보를 수집할 수 있습니다.[258] kretprobe는 (거의) 모든 주소에서 코드에 삽입할 수 있는 반면, kretprobe는 함수 반환 시 작동합니다. 프로브는 비슷한 목적을 가지고 있지만 사용 및 구현에 있어서도 약간의 차이가 있습니다.[259]
KGDB Linux를 사용하면 사용자 공간 프로그램과 거의 동일한 방식으로 디버깅할 수 있습니다. KGDB는 GDB를 실행하고 대상에 연결된 시스템을 직렬 케이블 또는 이더넷을 사용하여 디버깅해야 하는 추가 시스템이 필요합니다.[260]
개발모델
리눅스 커널 프로젝트는 롤링 기반으로 새로운 코드를 통합합니다. 프로젝트에 체크인된 소프트웨어는 오류 없이 작동하고 컴파일해야 합니다. 각 커널 하위 시스템에는 커널 코드 표준에 대한 패치 검토를 담당하는 유지 관리자가 할당되며, 몇 주의 병합 기간 내에 Linus Torvalds에 제출할 수 있는 패치 대기열을 유지합니다. 패치는 Torvalds에 의해 이전의 안정적인 리눅스 커널 릴리스의 소스 코드로 병합되어 다음 안정적인 커널에 대한 -rc 릴리스 후보가 생성됩니다. 병합 창이 닫히면 개발 릴리스의 새 코드에 대한 수정만 허용됩니다. 커널의 -rc 개발 릴리스는 회귀 테스트를 거치고 Torvalds에 의해 안정적이라고 판단되면 커널 서브시스템이 새로운 리눅스 커널을 출시하고 개발 프로세스를 처음부터 다시 시작합니다.[261]
부당한 대우를 받는다고 느끼는 개발자는 리눅스 재단의 기술 자문 위원회에 이를 보고할 수 있습니다.[262] 2013년 7월, USB 3.0 드라이버 세이지 샤프의 유지 관리자는 토발즈에게 커널 개발 커뮤니티에서 발생하는 욕설에 대해 언급할 것을 요청했습니다. 2014년에 샤프는 "과부하 관리자 및 다양한 문화적, 사회적 규범을 가진 사람들과 결합하여 기술적 우수성에 초점을 맞추는 것은 리눅스 커널 관리자가 종종 무뚝뚝하고 무례하거나 잔인하게 일을 처리한다는 것을 의미합니다."라고 말하며 리눅스 커널 개발에서 손을 뗐습니다.[263] 2018년 linux.conf.au (LCA) 컨퍼런스에서 개발자들은 지난 몇 년 동안 커뮤니티의 문화가 훨씬 더 좋아졌다는 견해를 밝혔습니다. 인텔 drm/i915 그래픽 커널 드라이버의 유지 관리자인 Daniel Better는 커널 커뮤니티에서 "다소 폭력적인 언어와 토론"이 줄어들거나 사라졌다고 언급했습니다.[264]
Laurent Pinchart는 2017 Embedded Linux Conference Europe에서 개발자들에게 커널 커뮤니티에 대한 경험에 대한 피드백을 요청했습니다. 그 문제들은 며칠 후에 열린 메인터넌스 서밋에서 논의되었습니다. 커널 자체 테스트 프레임워크의 유지보수자인 슈아 칸은 개발자들이 제출한 패치에 대해 유지보수자들이 어떻게 반응하는지에 대한 일관성 부족에 대한 우려를 반복했습니다. Torvalds는 시간이 지남에 따라 커널 서브시스템마다 다른 개발 프로세스를 채택했기 때문에 패치 처리에 일관성이 없을 것이라고 주장했습니다. 따라서 각 커널 서브시스템 유지 관리자가 패치 승인을 위한 규칙을 문서화하기로 합의했습니다.[265]
메인라인 리눅스
리눅스 커널을 포함하는 Linus Torvalds의 Git 트리를 메인라인 리눅스라고 합니다. 모든 안정적인 커널 릴리스는 메인라인 트리에서 시작되며 kernel.org 에 자주 게시됩니다. 메인라인 리눅스는 리눅스를 실행하는 많은 장치들 중 작은 부분 집합만 확실하게 지원합니다. 비주선 지원은 Yocto나 Linaro와 같은 독립적인 프로젝트에서 제공하지만 많은 경우 장치 공급업체의 커널이 필요합니다.[267] 벤더 커널을 사용하려면 보드 지원 패키지가 필요할 수 있습니다.
메인라인 리눅스 밖에서 커널 트리를 유지하는 것은 어려운 일임이 입증되었습니다.[268]
메인라이닝은 메인라인 커널에 장치에 대한 지원을 추가하는 노력을 의미하는데,[269] 이전에는 포크에서만 지원하거나 전혀 지원하지 않았습니다. 여기에는 일반적으로 드라이버 또는 장치 트리 파일을 추가하는 것이 포함됩니다. 이 작업이 완료되면 기능 또는 보안 수정이 메인라인으로 간주됩니다.[270]
리눅스 같은 커널
안정적인 지점의 유지보수자인 Greg Kroah-Hartman은 메인라인 커널에 수백만 줄의 코드를 추가하는 공급업체의 다운스트림 커널 포크에 리눅스와 같은 용어를 적용했습니다.[271] 2019년 구글은 안드로이드에서 메인라인 리눅스 커널을 사용하여 커널 포크 수를 줄이고 싶다고 밝혔습니다.[272] 리눅스 유사라는 용어는 전체 메인 라인 리눅스 커널이 아닌 코드의 작은 수정된 부분 집합을 포함하는 임베디드 리눅스 커널 부분 집합에도 적용되었습니다.[273]
리눅스 포크

공식 리눅스를 기반으로 커널을 개발하는 특정 커뮤니티가 있습니다. Linux-libr, Compute Node Linux, INK, L4Linux, RTLinux 및 UML(User-Mode Linux)을 포함하는 이러한 포크의 일부 흥미로운 코드 조각이 메인 라인으로 병합되었습니다.[274] 휴대폰용으로 개발된 일부 운영 체제는 구글 안드로이드, 파이어폭스 OS, HP webOS, 노키아 마에모, 졸라 세일피시 OS를 포함하여 초기에 많이 수정된 리눅스 버전을 사용했습니다. 2010년 리눅스 커뮤니티는 구글이 자체 커널 트리를 효과적으로 시작했다고 비판했습니다.[275][276]
이는 Android 하드웨어 플랫폼용으로 작성된 모든 드라이버가 Google의 커널 트리에만 존재하는 코드에 대한 종속성을 가지고 있기 때문에 kernel.org 트리에서 빌드하지 못하기 때문에 기본 커널 트리에 병합될 수 없음을 의미합니다. 이 때문에 구글은 하드웨어 드라이버와 플랫폼 코드의 많은 부분이 메인 커널 트리에 병합되는 것을 방지했습니다. 현재 다양한 벤더가 의존하고 있는 커널 브랜치를 효과적으로 구축할 수 있습니다.[277]
— Greg Kroah-Hartman, 2010
오늘날 Android는 디바이스 드라이버에서 주요 변경 사항이 구현되는 맞춤형 리눅스를[278] 사용하지만 코어 커널 코드에 약간의 변경 사항이 필요합니다. 안드로이드 개발자들은 안드로이드 운영 체제를 부팅할 수 있는 패치를 공식 리눅스에 제출하기도 합니다. 예를 들어, Nexus 7은 메인 라인 리눅스를 부팅하고 실행할 수 있습니다.[278]
2001년 컴퓨터 역사 박물관에서 열린 프레젠테이션에서 리누스 토르발스는 정확히 동일한 커널 소스를 사용하는 리눅스 배포에 대한 질문에 다음과 같이 말했습니다.
그들은... 글쎄, 그들은 있고, 그렇지 않습니다. 커널이 하나도 없습니다. 모든 배포물에는 고유한 변경 사항이 있습니다. 거의 첫날부터 그런 일이 계속되고 있습니다. Yggdrasil은 커널을 상당히 극단적으로 변경한 것으로 알려져 있으며, 심지어 오늘날에도 모든 주요 공급업체가 관심 있는 시장의 일부를 보유하고 있기 때문에 자체 변경 사항을 가지고 있다는 사실을 기억하실지 모르겠습니다. 왜냐하면 모든 사람들이 한 사람, 저, GPL의 요점이 아닌 모든 것을 추적할 수 있기를 기대한다면 말입니다. 그것이 개방적인 시스템이 필요한 것은 아닙니다. 따라서 실제로 배포판이 어떤 것이 자신에게 매우 중요하다고 판단하여 표준 커널에 없는 경우에도 패치를 추가한다는 사실은 저에게 정말 좋은 신호입니다. 그래서 예를 들어 라이저 같은 것이 그런 방법입니다.FS가 추가되었습니다. 그리고 라이저가 왜FS는 제가 한스 라이저를 사랑해서가 아니라 표준 커널에 통합된 최초의 저널링 파일 시스템입니다. SUSE가 실제로 Reiser와 함께 배송을 시작했기 때문입니다.FS는 표준 커널로 "괜찮다"고 했습니다. 이것은 실제로 생산에 사용되고 있습니다. 보통 사람들이 이렇게 하고 있습니다. 그들은 제가 모르는 것을 알고 있을 것입니다. 그래서 아주 실제적인 의미에서 많은 유통회사들이 하는 일을 보면, 그들은 "우리만의 지점을 만들자"와 "이것에 대한 우리의 변화를 만들자"의 일부입니다. 그리고 GPL 때문에, 저는 그들 중 가장 좋은 부분을 차지할 수 있습니다.[279]
— Linus Torvalds, 2001
개발공동체 갈등
리눅스 커널 개발자들 사이에 몇 가지 주목할 만한 충돌이 있었습니다. 이러한 충돌의 예는 다음과 같습니다.
- 2007년 7월, Con Kolivas는 리눅스 커널을 위한 개발을 중단할 것이라고 발표했습니다.[280][281]
- 2009년 7월, 앨런 콕스(Alan Cox)는 리누스 토르발스(Linus Torvalds)와 의견 충돌 후 TTY 계층 유지 관리자 역할을 그만뒀습니다.[282]
- 2010년 12월, 리눅스 SCSI 유지 관리자 James Bottomley와 SCST 유지 관리자 Vladislav Bolkhovitin 사이에 리눅스 커널에 어떤 SCSI 대상 스택을 포함해야 하는지에 대한 논의가 있었습니다.[283] 이것은 일부 리눅스 사용자들을 화나게 했습니다.[284]
- 2012년 6월, Torvalds는 NVIDIA가 드라이버를 폐쇄된 상태로 출시하는 것에 동의하지 않는다는 점을 분명히 했습니다.[285]
- 2014년 4월, 토르발스는 시스템d가 커널과 부정적으로 상호작용하도록 하는 버그를 처리하지 못한 이유로 Kay Sievers가 리눅스 커널에 패치를 제출하는 것을 금지했습니다.[286]
- 2014년 10월, Lennart Poettering은 Torvalds가 리눅스 커널 관련 메일링 목록에 대한 대략적인 토론 스타일을 용인하고 나쁜 롤 모델이라고 비난했습니다.[287]
- 2015년 3월 Christoph Hellwig는 Linux 커널에 대한 저작권 침해로 VMware를 상대로 소송을 제기했습니다.[288] 리누스 토르발스는 변호사들을 곪아 터지게 하는 질병이라고 부르며 이와 유사한 계획에 동의하지 않는다는 점을 분명히 했습니다.[289]
- 2021년 4월, 미네소타 대학의 한 팀은 연구의 일환으로 커널에 "나쁜 믿음" 패치를 제출하는 것으로 밝혀졌습니다. 이로 인해 대학의 한 구성원이 제출한 모든 패치가 즉시 반환되었습니다. 또한, 대학의 향후 패치는 즉시 거부될 것이라는 경고가 고위 관리자에 의해 발표되었습니다.[290][291]
저명한 리눅스 커널 개발자들은 개발자들 간의 충돌을 피하는 것이 중요하다는 것을 알고 있었습니다.[292] 오랫동안 라이너스 토발즈의 반대로 커널 개발자들을 위한 행동 강령이 없었습니다.[293] 그러나 2015년 3월 8일 리눅스 커널 충돌 코드가 도입되었습니다.[294] 2018년 9월 16일 기여자 규약에 근거한 새로운 행동강령으로 대체되었습니다. 이것은 토발즈가 공개 사과를 하고 커널 개발을 잠시 중단한 것과 동시에 발생했습니다.[295][296] 2018년 11월 30일, 행동강령을 준수하면서 인텔의 야르코 사키넨(Jarkko Sakkinen)은 소스 코드 댓글에 나타나는 "fuck"의 인스턴스를 'hug'라는 단어에 초점을 맞춘 적절한 버전으로 대체하는 패치를 보냈습니다.[297]
코드베이스
2021년[update] 기준 리눅스 커널 5.11 릴리스에는 약 3,034만 줄의 코드가 있습니다. 코드의 약 14%는 "코어"(arch, kernel, mm 디렉토리)의 일부이며, 60%는 드라이버입니다.
리눅스는 지능형 디자인이 아닌 진화입니다!
재개발예정원가

전통적인 독점 개발 환경에서 리눅스 커널 버전 2.6.0을 재개발하는 데 드는 비용은 COCOMO 개인 월 추정 모델을 사용하여 2004년 가격으로 미화 6억 1200만 달러(€467M, £394M)로 추정되었습니다.[301] 2006년에 유럽 연합이 자금을 지원한 연구에 따르면 커널 버전 2.6.8의 재개발 비용은 8억 8,200만 유로(11억 4,000만 달러, 7억 4,400만 파운드)로 더 높았습니다.[302]
이 주제는 2008년 10월 아만다 맥퍼슨(Amanda McPherson), 브라이언 프로핏(Brian Proffitt), 론 헤일 에반스(Ron Hale-Evans)에 의해 재검토되었습니다. David A를 이용해서. 휠러의 방법론에 따르면, 그들은 26.25 커널의 재개발 비용이 현재 13억 달러(페도라 9를 재개발하는 데 드는 총 108억 달러 중 일부)가 든다고 추정했습니다.[303] 다시 말하지만, 오비에도 대학교(스페인)의 Garcia-Garcia와 Alonso de Magdaleno는 커널에 매년 추가되는 가치가 2005년에서 2007년 사이에 약 1억 유로, 2008년에는 약 2억 2,500만 유로라고 추정하고 있으며, 유럽 연합에서 개발하는 데에도 약 10억 유로(2010년 2월 기준 약 14억 달러) 이상이 소요될 것으로 예상하고 있습니다.[304]
2011년[update] 3월 7일 현재 2.6.x 리눅스 커널의 당시 LOC(코드 라인)와 David A와 함께 임금 번호를 사용하고 있습니다. Wheeler의 계산에 따르면 리눅스 커널이 점점 커짐에 따라 이 커널을 재개발하는 데 약 30억 달러(약 22억 유로)가 소요될 것으로 예상됩니다. 2018년[update] 9월 26일 현재 업데이트된 계산에 따르면 4.14.14 리눅스 커널에 대해 당시 20,088,609 LOC(코드 라인)와 현재 미국 전국 평균 프로그래머 급여 75,506달러를 사용하여 기존 코드를 다시 작성하는 데 약 14,725,449,000달러(11,191,341,000파운드)가 소요됩니다.[305]
유지보수 및 장기지원

최신 커널 버전과 이전 커널 버전은 별도로 유지됩니다. 대부분의 최신 커널 릴리스는 Linus Torvalds가 감독했습니다.[306]
리눅스 커널 개발자 커뮤니티는 후속 안정 커널 개발 과정에서 발견된 소프트웨어 버그에 대한 수정을 적용하여 안정 커널을 유지합니다. 따라서 www.kernel.org 은 항상 두 개의 안정적인 커널을 나열할 것입니다. 다음으로 안정적인 리눅스 커널은 이제 겨우 8주에서 12주 후에 출시됩니다. 따라서 리눅스 커널 유지 관리자들은 일부 안정적인 커널 릴리스를 장기적인 것으로 지정했습니다. 이러한 장기적인 지원 리눅스 커널은 2년 이상 버그 수정으로 업데이트됩니다.[307] 2022년[update] 2월 기준으로 5.15.23, 5.10.100, 5.4.179, 4.19.229, 4.14.266 및 4.9.301의 6가지 장기 리눅스 커널이 있습니다.[308] 릴리스의 전체 목록은 Linux 커널 버전 기록에 있습니다.
리눅스 배포판과의 관계
대부분의 Linux 사용자는 Linux 배포판에서 제공하는 커널을 실행합니다. 일부 배포판은 "바닐라" 또는 "안정" 커널을 배송합니다. 그러나 여러 리눅스 배포 공급업체(예: Red Hat 및 Debian)는 제품에 통합된 다른 리눅스 커널 브랜치 세트를 유지합니다. 이들은 "vanilla" 지점에 비해 느린 속도로 업데이트되며, 일반적으로 관련 "안정적" 지점의 모든 수정 사항을 포함하지만 동시에 배포 공급업체가 지점을 기반으로 시작한 "vanilla" 버전에서 출시되지 않은 드라이버나 기능을 지원할 수도 있습니다.
법률적 측면
라이선스 조건
처음에 토르발스는 상업적 사용을 금지하는 라이선스로 리눅스를 출시했습니다.[309] 버전 0.12에서는 GNU 일반 공중 사용 허가서 버전 2(GPLv2)로 변경되었습니다.[28] 이 라이센스는 수정 및 수정되지 않은 Linux 버전의 배포 및 판매를 허용하지만 모든 복사본을 동일한 라이센스로 배포하고 요청 시 전체 소스 코드에 무료 액세스 권한을 부여해야 합니다.[310] Torvalds는 GPLv2로 Linux를 라이선스하는 것을 "내가 한 일 중 가장 잘한 일"이라고 설명했습니다.[309]
리눅스 커널은 GNU General Public License 버전 2(GPL-2.0 전용)에서만 명시적으로 라이센스가 부여되며,[6][9][10] 라이선스 사용자는 이후 버전을 선택할 수 있으며, 이는 일반적인 GPL 확장입니다. 기여된 코드는 GPL 호환 라이센스로 사용할 수 있어야 합니다.[11][105]
이후 GPL 버전(버전 3 포함)을 사용하기 위해 라이센스를 얼마나 쉽게 변경할 수 있는지, 그리고 이러한 변경이 심지어 바람직한지에 대한 상당한 논쟁이 있었습니다.[311] 토르발스는 버전 2.4.0을 출시할 때 자신의 코드가 버전 2에서만 출시된다고 구체적으로 밝혔습니다.[312] 그러나 GPL의 용어는 버전이 지정되지 않은 경우 모든 버전을 사용할 수 있다고 명시하고 [313]있으며 Alan Cox는 특정 버전의 GPL을 지정한 다른 리눅스 기여자는 거의 없다고 지적했습니다.[314]
2006년 9월, 29명의 주요 커널 프로그래머들을 대상으로 한 설문조사에서 28명이 당시의 GPLv3 초안보다 GPLv2를 더 선호하는 것으로 나타났습니다. 토발즈는 "많은 외부인들이... 제가 공개적으로 GPLv3의 열렬한 팬이 아니었기 때문에 저는 개인적으로 이상한 사람이라고 믿었습니다."[315] 토발즈, 그렉 크로아-하트먼, 앤드류 모튼을 포함한 세간의 이목을 끄는 커널 개발자 그룹은 대중 매체에 GPLv3에 대한 그들의 반대에 대해 논평했습니다.[316] 그들은 DRM/tivoization, 특허, "추가적인 제한"에 관한 조항들을 언급했고, GPLv3에 의한 "오픈 소스 유니버스"의 발칸화를 경고했습니다.[316][317] 리눅스 커널에 GPLv3를 채택하지 않기로 결정한 Linus Torvalds는 몇 년 후에도 자신의 비판을 반복했습니다.[318]
로드 가능한 커널 모듈
일부 로딩 가능한 커널 모듈(LKM)이 저작권법상 파생 저작물로 간주되어야 하는지 여부 및 이에 따라 GPL 조건에 해당하는지 여부가 논의됩니다.
라이센스 규칙에 따라 커널 인터페이스의[130][131] 공용 부분 집합만을 사용하는 LKM은 파생되지 않은 작업이므로 Linux는 시스템 관리자에게 트리 밖의 이진 개체를 커널 주소 공간에 로드할 수 있는 메커니즘을 제공합니다.[11]
dma_buf 커널 기능을 제대로 사용하는 트리 밖의 로드 가능한 모듈이 있습니다.[319] GPL 준수 코드는 확실히 사용할 수 있습니다. 그러나 빠른 GPU와 인텔 통합 GPU를 페어링하는 엔비디아 옵티머스(Nvidia Optimus)는 엔비디아 GPU가 활성화되면 인텔 프레임 버퍼에 기록됩니다. 하지만 Nvidia는 GPL인 LKM에서만 사용할 수 있는 규칙을 우회해야 하기 때문에 이 인프라를 사용할 수 없습니다.[132] Alan Cox는 LKML에서 이 기술 집행을 API에서 제거해 달라는 엔지니어의 요청을 거부했습니다.[320] 토르발스는 LKML에서 "[나는] 바이너리 전용 커널 모듈이 "기본적으로" 파생적이라고 주장한다고 분명히 밝혔습니다.[321]
한편, Torvalds는 "[특히] 회색 영역은 원래 다른 운영 체제용으로 작성된 드라이버와 같습니다(즉, 리눅스에서 파생된 작업이 아님은 분명합니다)"라고 말하기도 했습니다. 이 영역은 회색 영역이며, 개인적으로 일부 모듈은 단순히 리눅스용으로 설계되지 않았고 특별한 리눅스 동작에 의존하지 않는다는 이유로 파생되지 않은 것으로 간주될 수 있다고 생각합니다."[322] 특히 독점 그래픽 드라이버에 대해 많이 논의됩니다.
독점 모듈이 리눅스에 로드될 때마다 커널은 자체적으로 "오염된" 것으로 [323]표시되므로 오염된 커널의 버그 보고는 개발자에 의해 무시되는 경우가 많습니다.
펌웨어 이진 블롭
공식 커널, 즉 kernel.org 저장소의 리눅스 깃 분기는 GNU GPLv2 라이선스 조건에 따라 공개된 바이너리 블롭을 포함합니다. 리눅스는 또한 파일 시스템을 검색하여 바이너리 블롭, 독점 펌웨어, 드라이버 또는 기타 실행 가능한 모듈을 찾은 다음 커널 공간으로 로드하고 연결할 수 있습니다.[324]
필요한 경우(예: 부팅 장치에 액세스하거나 속도를 위해) 펌웨어를 커널에 내장할 수 있습니다. 이는 펌웨어를 vmlinux로 빌드하는 것을 의미하지만, 기술적 또는 법적 문제에 대해 항상 실행 가능한 옵션은 아닙니다(예: GPL과 호환되지 않는 펌웨어를 사용하여 이를 수행하는 것은 허용되지 않습니다).[325]
상표
Linux는 미국, 유럽 연합 및 기타 일부 국가에서 Linus Torvalds의 등록 상표입니다.[326][327] 상표를 둘러싼 법적 다툼은 리눅스 개발에 전혀 관여하지 않았던 변호사 윌리엄 델라 크로스가 리눅스라는 단어 사용에 대한 라이선스 비용을 요구하기 시작한 1996년부터 시작되었습니다. 델라 크로체가 최초로 사용되었다고 주장하기 훨씬 전에 이 단어가 일반적으로 사용되었다는 것이 입증된 후, 상표는 토르발스에게 수여되었습니다.[328][329][330]
참고 항목
- 운영 체제 – 컴퓨터 하드웨어 리소스를 관리하는 소프트웨어
- 커널 – 컴퓨터 운영 체제의 핵심
- 모놀리식 커널 – 커널 컴퓨터 프로그램 유형
- 마이크로커널 – 기존 커널보다 적은 서비스를 제공하는 커널
- 리눅스 커널 버전 히스토리 – 리눅스 커널 버전 히스토리
- 운영체제 비교
- 운영체제 커널 비교
- 리눅스 – 유닉스 계열 운영 체제
- Minix 3 – 유닉스 계열 운영 체제
- macOS – Apple 컴퓨터용 운영 체제
- Microsoft Windows – 컴퓨터 운영 체제
메모들
참고문헌
- ^ "Linux Logos and Mascots". Linux Online. 2008. Archived from the original on 15 August 2010. Retrieved 11 August 2009.
- ^ Greg Kroah-Hartman (2 March 2024). "Linux 6.7.8". Retrieved 3 March 2024.
- ^ Linus Torvalds (3 March 2024). "Linux 6.8-rc7". Retrieved 3 March 2024.
- ^ Bergmann, Arnd (3 March 2022). "Kbuild: move to -std=gnu11". git.kernel.org.
- ^ a b Proven, Liam. "Linux 6.1: Rust to hit mainline kernel". The Register. Retrieved 12 May 2023.
- ^ a b c d "COPYING". git.kernel.org. Archived from the original on 2 September 2021. Retrieved 2 September 2021.
- ^ "GPL-2.0-only". spdx.org. Retrieved 2 September 2021.
- ^ "Linux-syscall-note". spdx.org. Retrieved 2 September 2021.
- ^ a b "GPL-2.0". git.kernel.org.
- ^ a b "Linux-syscall-note". git.kernel.org.
- ^ a b c d e f "Linux kernel licensing rules — The Linux Kernel documentation". www.kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
- ^ a b c d e f g h i j k l m n Love, Robert (2010). Linux kernel development (3rd ed.). Upper Saddle River, NJ: Addison-Wesley. ISBN 978-0-672-32946-3. OCLC 268788260.
- ^ a b "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
- ^ a b c "Kernel Build System — The Linux Kernel documentation". Kernel.org. Archived from the original on 22 July 2020. Retrieved 17 July 2020.
- ^ a b c "Kconfig make config — The Linux Kernel documentation". Kernel.org. Archived from the original on 17 July 2020. Retrieved 13 September 2020.
- ^ a b "KernelBuild - Linux Kernel Newbies". kernelnewbies.org. Archived from the original on 19 October 2020. Retrieved 13 September 2020.
- ^ a b "The Sysctl Interface". Linux.it. Archived from the original on 17 February 2020. Retrieved 13 September 2020.
- ^ a b "sysctl(8) - Linux manual page". man7.org. Archived from the original on 30 September 2020. Retrieved 13 September 2020.
- ^ a b "procfs(5) - Linux manual page". man7.org. Archived from the original on 24 September 2020. Retrieved 13 September 2020.
- ^ "C Extensions (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Archived from the original on 20 November 2020. Retrieved 13 November 2020.
- ^ a b Richardson, Marjorie (1 November 1999). "Interview: Linus Torvalds". Linux Journal. Archived from the original on 14 May 2011. Retrieved 20 August 2009.
- ^ a b Torvalds, Linus Benedict (26 August 1991). "What would you like to see most in minix?". Newsgroup: comp.os.minix. Usenet: 1991Aug25.205708.9541@klaava.Helsinki.FI. Archived from the original on 9 May 2013. Retrieved 14 September 2016.
- ^ a b Welsh, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1: Introduction to Linux". Running Linux (3rd ed.). Sebastopol, California: O'Reilly Media, Inc. p. 5. ISBN 1-56592-976-4. OCLC 50638246.
- ^ a b "Free minix-like kernel sources for 386-AT - Google Groups". groups.google.com. 5 October 1991. Archived from the original on 1 March 2021. Retrieved 19 March 2020.
- ^ Williams, Sam (March 2002). "Chapter 9: The GNU General Public License". Free as in Freedom: Richard Stallman's Crusade for Free Software. O'Reilly. ISBN 0-596-00287-4. Retrieved 12 November 2010.
- ^ "Explaining BSD". FreeBSD Documentation Portal. Retrieved 6 October 2023.
- ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 107. ISBN 9781119150794.
- ^ a b Torvalds, Linus. "Release Notes for Linux v0.12". The Linux Kernel Archives. Archived from the original on 19 August 2007. Retrieved 21 February 2007.
- ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 1. ISBN 9783642607493.
- ^ a b c Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 16. ISBN 9783642607493.
- ^ Summers, David W. (19 January 1992). "Troubles with Partitions". Newsgroup: alt.os.linux. Usenet: 1992Jan19.085628.18752@cseg01.uark.edu. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
- ^ Clegg, Alan B. (31 March 1992). "It's here!". Newsgroup: comp.os.linux. Usenet: 1992Mar31.131811.19832@rock.concert.net. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
- ^ "Appendix A: The Tanenbaum-Torvalds Debate". Open Sources: Voices from the Open Source Revolution. O'Reilly. 1999. ISBN 1-56592-582-3. Retrieved 22 November 2006.
- ^ Tanenbaum, Andy (29 January 1992). "LINUX is obsolete". Newsgroup: comp.os.minix. Usenet: 12595@star.cs.vu.nl. Archived from the original on 17 October 2011. Retrieved 10 May 2006.
- ^ Tanenbaum, Andy (12 May 2006). "Tanenbaum-Torvalds Debate: Part II". VU University Amsterdam. Archived from the original on 5 August 2015. Retrieved 6 January 2007.
- ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 19 March 2020.
- ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 26 March 2020.
- ^ a b "How the development process works — The Linux Kernel documentation". Kernel.org. Archived from the original on 9 December 2017. Retrieved 26 March 2020.
- ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 108. ISBN 9781119150794.
- ^ Torvalds, Linus (9 June 1996). "Linux 2.0 really _is_ released." LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
- ^ Torvalds, Linus (20 January 1999). "2.2.0-final". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
- ^ a b "The Wonderful World of Linux 2.2". 26 January 1999. Archived from the original on 6 November 2014. Retrieved 27 October 2008.
- ^ "Linux/390 Observations and Notes". linuxvm.org. Archived from the original on 26 February 2019. Retrieved 29 March 2020.
- ^ Torvalds, Linus (4 January 2001). "And oh, btw." LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 8 March 2015.
- ^ "The Wonderful World of Linux 2.4". Archived from the original on 17 March 2005. Retrieved 27 October 2008.
- ^ Torvalds, Linus (17 December 2003). "Linux 2.6.0". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 28 February 2015.
- ^ "proc(5) - Linux manual page" (see /proc/sys/kernel/pid_max). Archived from the original on 7 February 2014. Retrieved 19 February 2014.
- ^ "btrfs Wiki". btrfs.wiki.kernel.org. Archived from the original on 25 April 2012. Retrieved 17 July 2020.
- ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. pp. 1–2. ISBN 9783642607493.
- ^ Kroah-Hartman, Greg (3 August 2006). "Adrian Bunk is now taking over the 2.6.16-stable branch". LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 21 February 2015.
- ^ Rothwell, Stephen (12 February 2008). "Announce: Linux-next (Or Andrew's dream :-))". LKML (Mailing list). Archived from the original on 24 November 2010. Retrieved 30 October 2010.
- ^ Corbet, Jonathan (21 October 2010). "linux-next and patch management process". LWN.net. Eklektix, Inc. Archived from the original on 21 June 2010. Retrieved 30 October 2010.
- ^ "The Linux Kernel Archives". Kernel.org. Archived from the original on 30 January 1998. Retrieved 22 January 2014.
- ^ Linux Kernel Mailing List (17 June 2005). "Linux 2.6.12". git-commits-head (Mailing list). Archived from the original on 26 January 2016. Retrieved 23 January 2008.
- ^ "Index of /pub/linux/kernel/v2.6". Kernel.org. Archived from the original on 10 February 2014. Retrieved 2 March 2014.
- ^ "Add a personality to report 2.6.x version numbers [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 15 July 2020.
- ^ a b Torvalds, Linus (21 July 2011). "Linux 3.0 release". Linux kernel mailing list. Archived from the original on 18 October 2019. Retrieved 16 May 2013.
- ^ Torvalds, Linus (30 May 2011). "Linux 3.0-rc1". LKML (Mailing list). Archived from the original on 31 May 2011. Retrieved 1 July 2013.
- ^ Vaughan-Nichols, Steven J. (13 December 2012). "Good-Bye 386: Linux to drop support for i386 chips with next major release". ZDNet. CBS Interactive. Archived from the original on 17 February 2015. Retrieved 6 February 2013.
- ^ Fingas, Jon (15 December 2012). "Linux to drop i386 support in the 3.8 kernel, make us upgrade our Doom rig". Engadget. AOL. Archived from the original on 2 April 2015. Retrieved 22 March 2015.
- ^ Vaughan-Nichols, Steven J. (11 December 2012). "Linux 3.7 arrives, ARM developers rejoice". ZDNet. CBS Interactive. Archived from the original on 5 November 2014. Retrieved 6 February 2013.
- ^ Torvalds, Linus (2 September 2013). "Linux 3.11". LKML (Mailing list). Archived from the original on 26 February 2014. Retrieved 3 September 2013.
- ^ "Linux 3.11". kernelnewbies.org. 2 September 2013. Retrieved 21 January 2014.
- ^ Torvalds, Linus (12 April 2015). "Linux 4.0 released". LKML (Mailing list). Archived from the original on 13 April 2015. Retrieved 12 April 2015.
- ^ "The Linux Foundation Releases Linux Development Report". Linux Foundation. 18 February 2015. Archived from the original on 19 July 2016. Retrieved 20 February 2015.
- ^ Michael Larabel (23 June 2014). "Linux Kernel At 19.5 Million Lines Of Code, Continues Rising". Phoronix. Archived from the original on 23 November 2020. Retrieved 23 June 2015.
- ^ Corbet, Jonathan (3 August 2020). "Some statistics from the 5.8 kernel cycle". LWN - Linux Weekly News. Archived from the original on 4 September 2020. Retrieved 11 August 2020.
- ^ "Stack Overflow Developer Survey 2019 - most popular technologies". Stack Overflow. Archived from the original on 8 October 2020. Retrieved 17 March 2020.
- ^ "Stack Overflow Developer Survey 2019 - development environments and tools". Stack Overflow. Archived from the original on 7 March 2020. Retrieved 17 March 2020.
- ^ "Usage Statistics and Market Share of Operating Systems for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
- ^ "Usage Statistics and Market Share of Unix for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
- ^ "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
- ^ "Gartner Says Sales of Tablets Will Represent Less Than 10 Percent of All Devices in 2014" (Press release). Egham, UK: Gartner. 15 October 2014. Archived from the original on 17 October 2014. Retrieved 19 October 2014.
- ^ Lunden, Ingrid (15 October 2014). "Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner". TechCrunch. AOL. Archived from the original on 23 October 2014. Retrieved 23 October 2014.
- ^ "Global PC Shipments Exceed Forecast with Mild Improvement in Consumer Demand, While Apple Moves to #5 Spot, According to IDC" (Press release). Framingham, MA: IDC. 8 October 2014. Archived from the original on 11 October 2014. Retrieved 19 October 2014.
- ^ "README". git.kernel.org. Archived from the original on 24 July 2012. Retrieved 24 March 2021.
- ^ "sched(7) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 27 July 2020.
- ^ "FAQ: Preemption". kernelnewbies.org. 22 August 2009. Archived from the original on 7 August 2020. Retrieved 7 May 2015.
- ^ a b Jonathan Corbet (24 February 2003). "Driver porting: the preemptible kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 7 May 2015.
- ^ a b Molnár, Ingo (13 April 2007). "[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]". LKML (Mailing list). Archived from the original on 3 November 2020. Retrieved 30 March 2020.
- ^ "Completely Fair Scheduler Linux Journal". Linuxjournal.com. Archived from the original on 3 August 2020. Retrieved 30 March 2020.
- ^ "ioctl(2) - Linux manual page". man7.org. Archived from the original on 20 July 2020. Retrieved 11 August 2020.
- ^ "aio(7) - Linux manual page". man7.org. Archived from the original on 12 April 2020. Retrieved 11 August 2020.
- ^ "io_setup(2) - Linux manual page". man7.org. Archived from the original on 20 August 2020. Retrieved 11 August 2020.
- ^ "KVM". Linux-kvm.org. Archived from the original on 28 March 2020. Retrieved 29 March 2020.
- ^ "TechComparison - Linux Virtualization Wiki". Virt.kernelnewbies.org. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
- ^ "Virtualization_support_through_KVM in Linux_2_6_20 - Linux Kernel Newbies". Kernelnewbies.org. Archived from the original on 29 November 2019. Retrieved 29 March 2020.
- ^ Coekaerts, Wim. "Linux mainline contains all the Xen code bits for Dom0 and DomU support". blogs.oracle.com. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
- ^ "Xen celebrates full Dom0 and DomU support in Linux 3.0 – blog.xen.org". 7 June 2011. Archived from the original on 7 June 2011. Retrieved 29 March 2020.
- ^ Wilk, Konrad Rzeszutek (31 January 2014). "Linux 3.14 and PVH". Xen Project. Archived from the original on 29 March 2020. Retrieved 29 March 2020.
- ^ "Introduction to Xen Virtualization Virtualization Guide openSUSE Leap 15.2". doc.opensuse.org. Archived from the original on 28 September 2020. Retrieved 29 September 2020.
- ^ "Virtualization technology Virtualization Guide openSUSE Leap 15.3". doc.opensuse.org. Retrieved 30 September 2021.
- ^ a b "SELinux Project". GitHub. Archived from the original on 12 December 2019. Retrieved 10 January 2020.
- ^ a b "AppArmor — The Linux Kernel documentation". Kernel.org. Archived from the original on 8 May 2020. Retrieved 10 January 2020.
- ^ Jake Edge (25 November 2008). "Character devices in user space". LWN.net. Archived from the original on 26 January 2021. Retrieved 7 May 2015.
- ^ Jonathan Corbet (2 May 2007). "UIO: user-space drivers". LWN.net. Archived from the original on 11 November 2020. Retrieved 7 May 2015.
- ^ a b c d "stable-api-nonsense - Linux kernel source tree". git.kernel.org. Archived from the original on 5 March 2021. Retrieved 18 April 2020.
- ^ Gorman, Mel (15 February 2004). Understanding the Linux Virtual Memory Manager (PDF). Prentice Hall. p. 26. ISBN 0-13-145348-3. Archived (PDF) from the original on 3 May 2019. Retrieved 27 January 2020.
- ^ Greg Ungerer. "uClinux mainline Announcement". Archived from the original on 31 October 2007. Retrieved 15 January 2008.
- ^ a b Nguyen, Binh (30 July 2004). "Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy". The Linux Documentation Project. Archived from the original on 2 December 2020. Retrieved 28 November 2012.
- ^ "Admin Guide README". Kernel.org git repositories.
- ^ "Linux kernel release 5.x — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
- ^ "README\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 1 October 2020. Retrieved 18 April 2020.
- ^ "syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 2 October 2020. Retrieved 18 April 2020.
- ^ a b "1.Intro.rst - Documentation/process/1.Intro.rst - Linux source code (v5.8) - Bootlin". elixir.bootlin.com. Retrieved 8 August 2020.
- ^ a b "syscalls". man7. Archived from the original on 15 January 2020. Retrieved 28 January 2020.
- ^ "intro(2) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 16 July 2020.
- ^ "clone". man7.org. Archived from the original on 18 January 2020. Retrieved 28 January 2020.
- ^ "feature_test_macros". man7.org. Archived from the original on 19 January 2020. Retrieved 28 January 2020.
- ^ "vdso(7) - Linux manual page". man7.org. Archived from the original on 2 February 2020. Retrieved 2 February 2020.
- ^ a b "futex(2) - Linux manual page". man7.org. Archived from the original on 31 January 2020. Retrieved 2 February 2020.
- ^ "syscall(2) - Linux manual page". man7.org. Archived from the original on 21 January 2020. Retrieved 2 February 2020.
- ^ "sysfs(5) - Linux manual page". man7.org. Archived from the original on 18 January 2020. Retrieved 6 January 2020.
- ^ "Rules on how to access information in sysfs — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
- ^ "Linux Foundation Referenced Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "LSB Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "Linux Standard Base Desktop Specification, Generic Part". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "Normative References". refspecs.linuxfoundation.org. Archived from the original on 12 August 2020. Retrieved 3 February 2020.
- ^ "Linux Standard Base Core Specification, Generic Part". refspecs.linuxfoundation.org. Archived from the original on 29 November 2019. Retrieved 3 February 2020.
- ^ "System V Application Binary Interface - Edition 4.1" (PDF). Sco.com. Archived (PDF) from the original on 13 December 2019. Retrieved 3 February 2020.
- ^ "Xinuos Inc. Developers Gabi 2003-12-17 System V Application Binary Interface - DRAFT". Sco.com. Archived from the original on 3 February 2020. Retrieved 3 February 2020.
- ^ "Executable And Linking Format (ELF)". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "elf(5) - Linux manual page". man7.org. Archived from the original on 30 November 2020. Retrieved 18 November 2020.
- ^ "Linux Standard Base Core Specification for X86-64". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "System V Application Binary Interface - DRAFT". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ Seyfarth, Ray (2012). Introduction to 64 Bit Intel Assembly Language Programming for Linux. CreateSpace Independent Publishing Platform. p. 170. ISBN 9781478119203.
- ^ "Anatomy of a system call, part 1 [LWN.net]". lwn.net. Archived from the original on 18 August 2020. Retrieved 16 July 2020.
- ^ "Anatomy of a system call, part 2 [LWN.net]". lwn.net. Archived from the original on 6 August 2020. Retrieved 16 July 2020.
- ^ Deucher, Alex (7 October 2014). "AMD's New Unified Open Source Driver". X.Org Foundation. Archived from the original on 21 January 2015. Retrieved 21 January 2015.
- ^ a b "Symbols - Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 3 August 2020. Retrieved 8 February 2020.
- ^ a b "Exported symbols and the internal API [LWN.net]". Lwn.net. Archived from the original on 31 March 2020. Retrieved 15 March 2020.
- ^ a b "Unexporting kallsyms_lookup_name() [LWN.net]". Lwn.net. Archived from the original on 1 April 2020. Retrieved 15 March 2020.
- ^ "Trees I: Radix trees [LWN.net]". lwn.net. Archived from the original on 8 November 2020. Retrieved 13 November 2020.
- ^ "Trees II: red-black trees [LWN.net]". lwn.net. Archived from the original on 13 November 2020. Retrieved 13 November 2020.
- ^ "Unreliable Guide To Hacking The Linux Kernel". Kernel.org (1st ed.). 2005. Archived from the original on 16 February 2020. Retrieved 15 March 2020.
- ^ "Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
- ^ "Unreliable Guide To Locking — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
- ^ "SCSI Interfaces Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 June 2020. Retrieved 11 June 2020.
- ^ "libATA Developer's Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 30 May 2020. Retrieved 11 June 2020.
- ^ "DRM Internals — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
- ^ "Kernel Mode Setting (KMS) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Introduce DMA buffer sharing mechanism [LWN.net]". lwn.net. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Sharing CPU and GPU buffers on Linux*". 01.org. 12 May 2016. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Buffer Sharing and Synchronization — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
- ^ "About mac80211". Linux Kernel Organization, Inc. Archived from the original on 1 February 2021. Retrieved 8 June 2014.
- ^ "Linux 802.11 Driver Developer's Guide — The Linux Kernel documentation". Kernel.org. Retrieved 19 November 2021.
- ^ "[PATCH v3 1/2] fork: add clone3 [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 16 July 2020.
- ^ "clone(2) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 15 July 2020.
- ^ "clone3(), fchmodat4(), and fsinfo() [LWN.net]". lwn.net. Archived from the original on 15 June 2020. Retrieved 15 July 2020.
- ^ "ld-linux.so(8) - Linux manual page". man7.org. Archived from the original on 26 November 2020. Retrieved 18 November 2020.
- ^ "nptl(7) - Linux manual page". man7.org. Archived from the original on 25 July 2020. Retrieved 25 July 2020.
- ^ "pthreads(7) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 25 July 2020.
- ^ "pthread_create(3) - Linux manual page". man7.org. Archived from the original on 25 July 2020. Retrieved 25 July 2020.
- ^ "futex(7) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 25 July 2020.
- ^ "Kernel threads made easy [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 August 2020.
- ^ "execve(2) - Linux manual page". Man7.org. Archived from the original on 15 July 2020. Retrieved 17 July 2020.
- ^ "capabilities(7) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 2 August 2020.
- ^ a b Bar, Moshe (1 April 2000). "The Linux Scheduler". Linux Journal. Belltown Media, Inc. Archived from the original on 2 February 2021. Retrieved 14 April 2012.
- ^ BKK19-TR03 - The Linux Kernel Scheduler - Overview, archived from the original on 15 December 2021, retrieved 17 May 2021
- ^ "Lowering Latency in Linux: Introducing a Preemptible Kernel Linux Journal". Linuxjournal.com. Archived from the original on 9 August 2020. Retrieved 17 August 2020.
- ^ "CFS Scheduler — The Linux Kernel documentation". Kernel.org. Retrieved 1 May 2021.
- ^ "IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)". Archived from the original on 16 November 2010. Retrieved 17 March 2016.
- ^ Larabel, Michael (24 January 2014). "The Linux 3.14 Kernel Already Has Many Exciting Features". Phoronix. Archived from the original on 13 August 2020. Retrieved 3 February 2014.
- ^ "Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling". kernelnewbies.org. 30 March 2014. Archived from the original on 15 January 2021. Retrieved 2 April 2014.
- ^ "RT-mutex implementation design — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ McKenney, Paul (10 August 2005). "A realtime preemption overview". LWN.net. Archived from the original on 10 August 2020. Retrieved 5 February 2012.
- ^ "OSADL Project: Realtime Linux". OSADL. Archived from the original on 4 February 2021. Retrieved 5 February 2012.
- ^ a b "Steven-Rostedt_on_PREEMPT_RT" (PDF).
- ^ "EEVDF Scheduler May Be Ready For Landing With Linux 6.6". Phoronix. Retrieved 31 August 2023.
- ^ "[PATCH 00/10] sched: EEVDF using latency-nice [LWN.net]". LWN.net.
- ^ "An EEVDF CPU scheduler for Linux [LWN.net]". LWN.net. Retrieved 31 August 2023.
- ^ "EEVDF Scheduler Merged For Linux 6.6, Intel Hybrid Cluster Scheduling Re-Introduced". Phoronix.
- ^ "locking — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "locking.rst - Documentation/kernel-hacking/locking.rst - Linux source code (v5.11.10) - Bootlin". elixir.bootlin.com. Retrieved 29 March 2021.
- ^ "What is RCU, Fundamentally? [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "What is RCU? Part 2: Usage [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "RCU part 3: the RCU API [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "Linux-Kernel Memory Model". open-std.org. Retrieved 29 March 2021.
- ^ "A formal kernel memory-ordering model (part 1) [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "A formal kernel memory-ordering model (part 2) [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ Stern, Alan. "Explanation of the Linux-Kernel Memory Consistency Model".
- ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 17 December 2021.
- ^ a b "Lock types and their rules — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "Short subjects: Realtime, Futexes, and ntfs3". Lwn.net. Retrieved 20 February 2022.
- ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 20 February 2022.
- ^ "RT-mutex implementation design — the Linux Kernel documentation".
- ^ "Runtime locking correctness validator — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "Interrupts, threads, and lockdep [LWN.net]". lwn.net. Retrieved 17 December 2021.
- ^ "The Linux Storage Stack Diagram". Thomas-krenn.com. Archived from the original on 3 August 2020. Retrieved 19 March 2020.
- ^ "The SLUB allocator". Lwn.net. 11 April 2007. Retrieved 20 February 2022.
- ^ a b "Slab allocators in the Linux Kernel: SLAB, SLOB, SLUB" (PDF). Events.static.linuxfound.org. Retrieved 20 February 2022.
- ^ "Kernel/Git/Torvalds/Linux.git - Linux kernel source tree". Git.kernel.org.
- ^ Corbet, Jonathan (28 April 2023). "6.4 Merge window, part 1 [LWN.net]". LWN.net. Retrieved 12 May 2023.
- ^ "Linux's SLAB Allocator Next On Deck For Deprecation & Removal". Phoronix. Retrieved 12 May 2023.
- ^ a b c Torvalds, Linus (January 1999). "The Linux Edge". Open Sources: Voices from the Open Source Revolution. O'Reilly. ISBN 1-56592-582-3. Retrieved 13 October 2013.
- ^ "Porting Linux to the DEC Alpha: The Kernel and Shell". Archived from the original on 5 September 2019. Retrieved 5 October 2019.
- ^ "Linux on Alpha: A Strategic Choice". Archived from the original on 4 September 2019. Retrieved 5 October 2019.
- ^ "Avalon Cluster TOP500 Supercomputer Sites". Top500.org. Archived from the original on 5 October 2019. Retrieved 5 October 2019.
- ^ Wang, David (6 May 2010). "Android Now Running On iPhone 3G". TechHive. IDG. Archived from the original on 22 July 2010. Retrieved 11 July 2010.
- ^ "LKDDb". LKDDb Project. Archived from the original on 25 February 2021. Retrieved 26 January 2021.
- ^ "Linux Hardware". Linux Hardware Project. Archived from the original on 26 January 2021. Retrieved 26 January 2021.
- ^ "Linux kernel 4.0, Section 1.2. Live patching". kernelnewbies.org. 26 April 2015. Archived from the original on 4 May 2015. Retrieved 27 April 2015.
- ^ Jonathan Corbet (25 February 2015). "A rough patch for live patching". LWN.net. Archived from the original on 27 April 2015. Retrieved 27 April 2015.
- ^ "kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree)". kernel.org. 11 February 2015. Archived from the original on 11 June 2015. Retrieved 27 April 2015.
- ^ Mookhey, K. K.; Burghate, Nilesh (1 July 2005). Linux: Security, Audit and Control Features. US: ISACA. p. 14. ISBN 1-893209-78-4. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ Hatch, Brian (15 July 2008). Hacking Exposed Linux: Linux Security Secrets and Solutions. McGraw-Hill Osborne Media. p. 524. ISBN 978-0-07-226257-5. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ Jaeger, Trent (7 October 2008). Operating System Security. Morgan and Claypool Publishers. p. 122. ISBN 978-1-59829-212-1. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ "CAP_PERFMON — and new capabilities in general [LWN.net]". lwn.net. Archived from the original on 4 August 2020. Retrieved 2 August 2020.
- ^ "Linux Security Module Usage — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 May 2020. Retrieved 10 January 2020.
- ^ "National Security Agency Central Security Service > What We Do > Research > SE Linux > SE Linux FAQs". Nsa.gov. Archived from the original on 18 September 2019. Retrieved 10 January 2020.
- ^ "Seccomp BPF (SECure COMPuting with filters) — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 10 January 2020.
- ^ Andrews, Jeremy (16 July 2008). "Security Bugs and Full Disclosure". KernelTrap. Archived from the original on 19 July 2008. Retrieved 31 December 2010.
- ^ Spengler, Brad (16 July 2008). "Linux's unofficial security-through-coverup policy". Full Disclosure (Mailing list). Archived from the original on 7 August 2020. Retrieved 31 December 2010.
- ^ "The Linux Kernel Archives". www.kernel.org. Retrieved 28 February 2023.
- ^ a b "2017 State of Linux Kernel Development". The Linux Foundation. 25 October 2017. Archived from the original on 27 May 2020. Retrieved 27 May 2020.
- ^ "Contributor Covenant Code of Conduct". The Linux Kernel documentation. Retrieved 6 October 2021.
- ^ "Linux Kernel Contributor Covenant Code of Conduct Interpretation". The Linux Kernel Documentation. Retrieved 6 October 2021.
- ^ Williams, Dan. "[PATCH] CodingStyle: Inclusive Terminology". Linux Kernel Mailing List.
- ^ "git-clone(1) - Linux manual page". man7.org. Archived from the original on 14 October 2020. Retrieved 16 August 2020.
- ^ "git-pull(1) - Linux manual page". man7.org. Archived from the original on 12 November 2020. Retrieved 16 August 2020.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 11. ISBN 9780768696790.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 12. ISBN 9780768696790.
- ^ "How the development process works". Archived from the original on 9 December 2017. Retrieved 4 February 2018.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 13. ISBN 9780768696790.
- ^ "HOWTO do Linux kernel development — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
- ^ "Linux kernel coding style — The Linux Kernel documentation". Kernel.org. Archived from the original on 5 January 2020. Retrieved 4 January 2020.
- ^ Tim Anderson. "Linux kernel minimum compiler raised to GCC 5.1, allowing potential C11 use". The Register. Retrieved 12 May 2023.
- ^ Larabel, Michael. "The Switch Has Been Made From C89 To C11/GNU11 With Linux 5.18". www.phoronix.com. Retrieved 12 May 2023.
- ^ Sharwood, Simon (11 December 2022). "Linus Torvalds reveals Linux kernel 6.1". The Register. Retrieved 12 May 2023.
- ^ Corbet, Jonathan. "Rust in the 6.2 kernel". LWN.net. Retrieved 12 May 2023.
- ^ Larabel, Michael. "More Rust Code Readied For Linux 6.3 - Closer To Having Rust Drivers Upstreamed". Phoronix. Retrieved 12 May 2023.
- ^ Kubbilun, Ingo A. (2 June 2004). "Linux kernel patch for Intel Compiler" (in German). Pyrillion.org. Archived from the original on 22 July 2011. Retrieved 12 November 2010.
- ^ timothy (26 February 2009). "High Performance Linux Kernel Project — LinuxDNA". Slashdot Linux. Dice Holdings. Archived from the original on 18 October 2019. Retrieved 30 October 2010.
- ^ Ryan, Justin (25 February 2009). "LinuxDNA Supercharges Linux with the Intel C/C++ Compiler". Linux Journal. Belltown Media, Inc. Archived from the original on 9 November 2020. Retrieved 30 October 2010.
- ^ Larabel, Michael (5 March 2023). "Linux 6.3 Drops Support For The Intel ICC Compiler". Phoronix. Retrieved 6 March 2023.
- ^ Lelbach, Bryce (25 October 2010). "Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)". cfe-dev (Mailing list). Archived from the original on 7 September 2015.
- ^ Larabel, Michael (12 April 2014). "Linux 3.15 Can Almost Be Compiled Under LLVM's Clang". Phoronix. Archived from the original on 13 August 2020. Retrieved 10 June 2014.
- ^ Larabel, Michael. "Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel". Phoronix. Archived from the original on 13 August 2020. Retrieved 20 November 2014.
- ^ Edge, Jake (7 May 2013). "LFCS: The LLVMLinux project". LWN.net. Archived from the original on 10 August 2020. Retrieved 3 March 2015.
- ^ Möller, Jan-Simon (2 February 2014). "LLVMLinux: The Linux Kernel with Dragon Wings" (PDF). LLVM Project. Archived (PDF) from the original on 3 August 2020. Retrieved 3 March 2015.
- ^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (18 October 2017). "2017 LLVM Developers' Meeting: Compiling Android userspace and Linux kernel with LLVM". YouTube. Archived from the original on 31 December 2020. Retrieved 7 December 2020.
- ^ Hackmann, Greg (2 February 2017). "marlin-nougat-mr1-clang Patch Series". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Kaehlcke, Matthias (22 October 2018). "cros-kernel2: Make clang the default compiler for kernel builds". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Larabel, Michael (4 February 2019). "Using LLVM Clang To Compile The Linux Kernel Is Heating Up Again Thanks To Google". Phoronix. Archived from the original on 25 November 2020. Retrieved 6 December 2020.
- ^ Desaulniers, Nick (10 December 2019). "vts: kernel: enforce vts_kernel_toolchain for all TARGET_ARCH for R". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Desaulniers, Nick (19 November 2020). "Re: violating function pointer signature". LKML. Retrieved 6 December 2020.
- ^ Bradford, John (8 March 2003). "Re: what's an OOPS". LKML (Mailing list). Archived from the original on 31 October 2014. Retrieved 30 October 2010.
- ^ "syslog(2) - Linux manual page". man7.org. Archived from the original on 13 October 2020. Retrieved 15 August 2020.
- ^ "kmsg: export printk records to the /dev/kmsg interface [LWN.net]". lwn.net. Archived from the original on 2 October 2015. Retrieved 16 August 2020.
- ^ "systemd". Freedesktop.org. Archived from the original on 18 August 2020. Retrieved 16 August 2020.
- ^ "systemd-journald(8) - Linux manual page". man7.org. Archived from the original on 12 August 2020. Retrieved 15 August 2020.
- ^ See what your computer is doing with Ftrace utilities, archived from the original on 15 December 2021, retrieved 9 May 2021
- ^ "Debugging the kernel using Ftrace - part 1 [LWN.net]". lwn.net. Archived from the original on 9 November 2020. Retrieved 15 September 2020.
- ^ "Debugging the kernel using Ftrace - part 2 [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 September 2020.
- ^ "ftrace - Function Tracer — The Linux Kernel documentation". Kernel.org. Archived from the original on 19 September 2020. Retrieved 15 September 2020.
- ^ "Boot-time tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 31 October 2020. Retrieved 19 September 2020.
- ^ "Kernel Probes (Kprobes) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 October 2020. Retrieved 6 October 2020.
- ^ "Uprobe-tracer: Uprobe-based Event Tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 4 December 2020. Retrieved 6 October 2020.
- ^ "Using kgdb, kdb and the kernel debugger internals". mirrors.edge.kernel.org. Archived from the original on 26 January 2021. Retrieved 3 November 2020.
- ^ Gene Sally (2010). Pro Linux Embedded Systems. Apress. p. 252. ISBN 9781430272267.
- ^ "Code of Conflict". Retrieved 4 February 2018.[영구 데드링크]
- ^ Sharwood, Simon (6 October 2015). "Linux kernel dev who asked Linus Torvalds to stop verbal abuse quits over verbal abuse". The Register. Archived from the original on 29 March 2020. Retrieved 4 February 2018.
- ^ Edge, Jake (31 January 2018). "Too many lords, not enough stewards". LWN.net. Archived from the original on 9 November 2020. Retrieved 4 February 2018.
- ^ Corbet, Jonathan (6 November 2017). "Bash the kernel maintainers". LWN.net. Archived from the original on 26 January 2021. Retrieved 4 February 2018.
- ^ Billimoria, Kaiwan N. (2021). Linux Kernel Programming A Comprehensive Guide to Kernel Internals, Writing Kernel Modules, and Kernel Synchronization. Birmingham: Packt Publishing, Limited. p. 55. ISBN 978-1-78995-592-7. OCLC 1240585605.
- ^ Vaduva, Alexandru (2016). Linux : embedded development : leverage the power of Linux to develop captivating and powerful embedded Linux projects : a course in three modules. Alex Gonzalez, Chris Simmonds. Birmingham, UK. p. 663. ISBN 978-1-78712-445-5. OCLC 960471438.
{{cite book}}
: CS1 maint: 위치 누락 게시자(링크) - ^ Karim Yaghmour (2008). Building embedded Linux systems (2nd ed.). Sebastopol [Calif.]: O'Reilly Media. p. 387. ISBN 978-0-596-52968-0. OCLC 273049576.
- ^ Yaghmour, Karim (2011). Embedded Android. Sebastopol, CA: O'Reilly Media. p. 44. ISBN 978-1-4493-2798-9. OCLC 812180000.
- ^ "SoC (System on a Chip)". OpenWrt Wiki. 6 November 2014. Archived from the original on 23 August 2022. Retrieved 15 March 2021.
- ^ "What to do about CVE numbers [LWN.net]". lwn.net. Retrieved 15 March 2021.
- ^ Amadeo, Ron (20 November 2019). "Google outlines plans for mainline Linux kernel support in Android". Ars Technica. Retrieved 31 March 2021.
- ^ Bruchon, Jody (24 April 2021), jbruchon/elks, retrieved 27 April 2021
- ^ "The state of preempt-rt". linuxplumbersconf.org. Archived from the original on 15 October 2016. Retrieved 14 June 2016.
- ^ Meyer, David (3 February 2010). "Linux developer explains Android kernel code removal". ZDNet. CBS Interactive. Archived from the original on 15 October 2016. Retrieved 3 February 2010.
- ^ "Chapter 03: maemo Platform Overview". maemo Technology Overview. Nokia. 2008. Archived from the original on 16 June 2008. Retrieved 9 April 2010.
- ^ Kroah-Hartman, Greg (2 February 2010). "Android and the Linux kernel community". Archived from the original on 27 April 2019. Retrieved 3 February 2010.
- ^ a b Roger Ye (2017). Android System Programming. Packt Publishing. p. 14. ISBN 9781787120389.
- ^ Torvalds, Linus (19 September 2001). "The Origins of Linux—Linus Torvalds". YouTube. Archived from the original on 15 December 2021. Retrieved 6 December 2020.
- ^ "Why I quit: kernel developer Con Kolivas". APC Magazine. ACP Magazines. 24 July 2007. Archived from the original on 7 July 2011. Retrieved 15 August 2011.
- ^ Corbet, Jonathan (25 July 2007). "Re: -mm merge plans for 2.6.23". LWN.net. Archived from the original on 11 February 2018. Retrieved 10 February 2018.
- ^ Cox, Alan (28 July 2009). "Re: [PATCH] kdesu broken". Archived from the original on 11 February 2018. Retrieved 10 February 2018.
- ^ Rodrigues, Goldwyn (22 January 2011). "A tale of two SCSI targets". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Steinmetz, Andreas (17 January 2013). "LIO - the broken iSCSI target implementation". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Paul, Ryan (19 June 2012). "Linus Torvalds says "f–k you" to NVIDIA". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ John Gold (3 April 2014). "Linus Torvalds suspends key Linux developer: Kernel panic as Systemd dev pokes the bear". Archived from the original on 24 March 2019. Retrieved 24 March 2019.
- ^ Poettering, Lennart (6 October 2014). "On the sickness of the Linux Kernel Community". Google+. Archived from the original on 27 May 2018. Retrieved 10 February 2018.
- ^ Brodkin, Jon (6 March 2015). "VMware alleged to have violated Linux's open source license for years". Ars Technica. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ McCarthy, Kieren (26 August 2016). "Having offended everyone else in the world, Linus Torvalds calls own lawyers a 'nasty festering disease'". The Register. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Kroah-Hartman, Greg. "[PATCH 000/190] Revertion of all of the umn.edu commits". Linux Kernel Mailing List Archive. Retrieved 13 January 2022.
- ^ Chin, Monica (30 April 2021). "How a university got itself banned from the Linux kernel". The Verge. Retrieved 13 January 2022.
- ^ Corbet, Jonathan (10 September 2007). "KS2007: Developer relations and development process". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
- ^ Brodkin, Jon (16 July 2013). "Linus Torvalds defends his right to shame Linux kernel developers". ARS Technica. Archived from the original on 17 February 2018. Retrieved 11 February 2018.
- ^ Corbet, Jonathan (9 March 2015). "The kernel's code of conflict". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
- ^ Corbet, Jonathan (18 September 2018). "Code, conflict, and conduct". LWN.net. Archived from the original on 19 September 2018. Retrieved 19 September 2018.
- ^ Cohen, Noam (19 September 2018). "After Years of Abusive E-mails, the Creator of Linux Steps Aside". The New Yorker. Archived from the original on 20 February 2020. Retrieved 24 September 2018.
- ^ Larabel, Michael. "Dropping Profanity In Kernel Code Comments: Linux Gets "Hugs"". Phoronix. Archived from the original on 21 April 2019. Retrieved 15 June 2019.
- ^ "Linux Evolution" (PDF). 26 March 2008. Archived (PDF) from the original on 14 December 2013. Retrieved 6 November 2013.
- ^ "Perpetual Development: A Model of the Linux Kernel Life Cycle" (PDF). 25 October 2011. Archived (PDF) from the original on 17 October 2013. Retrieved 6 November 2013.
- ^ Kroah-Hartman, Greg (12 February 2008). "Re: Announce: Linux-next (Or Andrew's dream :-))". Linux Kernel Mailing List (Mailing list). Archived from the original on 2 February 2017. Retrieved 30 January 2017.
- ^ Wheeler, David A. "Linux Kernel 2.6: It's Worth More!". Archived from the original on 20 August 2011. Retrieved 18 January 2007.
- ^ "Economic impact of FLOSS on innovation and competitiveness of the EU ICT sector" (PDF) (Table 3 on page 50). Archived (PDF) from the original on 15 February 2010. Retrieved 8 January 2011.
- ^ "Estimating Total Development Cost Of a Linux Distribution" (PDF) (Table on page 6). Archived from the original (PDF) on 11 July 2010.
- ^ "The Billion Dollar Kernel". Linux.slashdot.org. 24 February 2010. Archived from the original on 15 May 2011. Retrieved 12 November 2010.
- ^ Wheeler, David. "The Linux Kernel: It's Worth More!". Archived from the original on 24 February 2021. Retrieved 17 September 2012.
- ^ "Linux MAINTAINERS file". Archived from the original on 12 January 2013.
- ^ Alexandru Vaduva, Alex Gonzalez & Chris Simmonds (2016). Linux: Embedded Development. Packt Publishing. p. 663. ISBN 9781787124455.
- ^ "The Linux Kernel Archives". Archived from the original on 15 February 2022. Retrieved 15 February 2022.
- ^ a b Yamagata, Hiroo (3 August 1997). "The Pragmatist of Free Software". HotWired. Archived from the original on 10 February 2007. Retrieved 21 February 2007.
- ^ "GPL-v2". gnu.org. Archived from the original on 25 December 2019. Retrieved 28 January 2020.
- ^ Corbet, Jonathan (31 January 2006). "GPLv3 and the kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 21 February 2007.
- ^ Torvalds, Linus (8 September 2000). "Linux-2.4.0-test8". LKML (Mailing list). Archived from the original on 15 May 2020. Retrieved 21 February 2007.
- ^ "gnu.org". Gnu.org. Archived from the original on 2 February 2021. Retrieved 18 October 2017.
- ^ Cox, Alan (20 January 2006). "Re: GPL V3 and Linux". LKML (Mailing list). Archived from the original on 26 January 2021. Retrieved 21 February 2007.
- ^ Shankland, Stephen (25 September 2006). "Top Linux programmers pan GPL 3". News.com. CNET. Retrieved 21 February 2007.[영구 데드링크]
- ^ a b James E.J. Bottomley; Mauro Carvalho Chehab; Thomas Gleixner; Christoph Hellwig; Dave Jones; Greg Kroah-Hartman; Tony Luck; Andrew Morton; Trond Myklebust; David Woodhouse (15 September 2006). "Kernel developers' position on GPLv3: The Dangers and Problems with GPLv3". LWN.net. Archived from the original on 18 January 2021. Retrieved 11 March 2015.
- ^ Petreley, Nicholas (27 September 2006). "A fight against evil or a fight for attention?". linuxjournal.com. Archived from the original on 2 March 2018. Retrieved 11 March 2015.
- ^ "Linus Torvalds says GPL v3 violates everything that GPLv2 stood for". Debconf 2014. 2014. Archived from the original on 8 May 2018. Retrieved 21 March 2018.
- ^ Clark, Rob; Semwal, Sumit (1 November 2012). "DMA Buffer Sharing Framework: An Introduction" (PDF). Embedded Linux Conference. Archived (PDF) from the original on 8 August 2014. Retrieved 2 August 2014.
- ^ Cox, Alan (10 October 2012). "[PATCH] dma-buf: Use EXPORT_SYMBOL". Direct Rendering Infrastructure (Mailing list). Archived from the original on 22 January 2013. Retrieved 3 September 2013.
- ^ Torvalds, Linus (10 December 2003). "RE: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 15 June 2011. Retrieved 31 December 2010.
- ^ Torvalds, Linus (3 December 2003). "Re: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 28 April 2020. Retrieved 12 November 2010.
- ^ "Tainted kernels — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 13 January 2020.
- ^ "Linux Firmware API — The Linux Kernel documentation". Kernel.org. Archived from the original on 13 January 2020. Retrieved 13 January 2020.
- ^ "Built-in firmware — The Linux Kernel documentation". Kernel.org. Archived from the original on 10 June 2020. Retrieved 10 June 2020.
- ^ "Linux TM registration in the US". uspto.gov. Archived from the original on 24 February 2021. Retrieved 6 September 2019.
- ^ "Linux TM registration in the EU". euipo.europa.eu. Archived from the original on 9 June 2016. Retrieved 28 November 2020.
- ^ Hughes, Phil (1 August 1997). "Linux Trademark Dispute". Linux Journal. Belltown Media, Inc. Archived from the original on 30 April 2010. Retrieved 8 December 2010.
- ^ Hughes, Phil (1 March 1997). "Action Taken on Linux Trademark". Linux Journal. Belltown Media, Inc. Archived from the original on 3 March 2010. Retrieved 8 December 2010.
- ^ Gisselberg, Tonya (2010). "The Trademark History of Linux, the Operating System" (PDF). Gisselberg Law Firm, Inc. Archived from the original (PDF) on 11 July 2011. Retrieved 8 December 2010.
추가읽기
- Torvalds, Linus; Diamond, David (2001). Just for Fun: The Story of an Accidental Revolutionary. HarperBusiness. ISBN 978-0066620732.
- Bezroukov, Nikolai. "Ch 4: A benevolent dictator". Portraits of Open Source Pioneers (e-book). Softpanorama. Archived from the original on 13 October 2005. Retrieved 3 October 2005.
- "LinkSys and binary modules". LWN.net Weekly Edition. 16 October 2003. Archived from the original on 1 August 2016. Retrieved 21 July 2016.
- "Everyone's Favorite Linux Mascot". Archived from the original on 16 August 2005. Retrieved 16 June 2005.
- Pranevich, Joseph (December 2003). "The Wonderful World of Linux 2.6". Archived from the original on 16 July 2003.
- "LinuxChanges". Archived from the original on 31 October 2005. Retrieved 31 October 2005.
- "Seminar Paper on Linux Kernel 2.6". Archived from the original on 2 February 2007.
- "Linux Device Drivers" (3rd ed.). Archived from the original on 27 July 2016. Retrieved 21 July 2016.
- "Understanding the Linux Kernel" (Book) (3rd ed.). Archived from the original on 17 December 2005. Retrieved 22 December 2005.
- Linux Kernel Networking, by Rami Rosen, 2014 (Book). Archived from the original on 12 May 2015. Retrieved 14 June 2015.
- "Linux: The GPL And Binary Modules". Archived from the original on 23 July 2005.
- "Anatomy of the Linux kernel". IBM. Archived from the original on 27 June 2007. Retrieved 9 June 2007.
- Tanenbaum, Andrew; Bos, Herbert (2015). Modern Operating Systems. United States of America: Pearson. p. 722. ISBN 9781292061429. OCLC 892574803.
외부 링크


- 공식 홈페이지
- 리눅스 커널 문서 색인
- 리눅스 커널 맨 페이지
- 커널 버그질라 및 각 최신 커널 버전에 대한 회귀 분석
- 커널 뉴비즈, 다양한 커널 관련 정보의 출처
- 커널 관련 정보의 권위 있는 출처인 LWN.net 의 커널 커버리지
- 리눅스 커널 소스 코드 교차 참조인 부트린의 Elixir Cross Referenceer
- YouTube의 리눅스 커널에서 Greg Kroah Hartman