{{위키데이터 속성 추적}}
{{운영 체제 정보
| 이름               = 리눅스 커널<br />Linux kernel
| 로고               = [[파일:Tux.svg|100px]]
| 스크린샷           = [[파일:Linux 3.0.0 boot.png|250px]]
| 설명               = 
| 개발자             = [[리누스 토르발스]] (커뮤니티 주체)
| 계열               = [[유닉스 계열]]
| 상태               = 
| 소스형태           = [[자유 소프트웨어]]
| released = 0.02 <small>({{시작 날짜와 나이|1991|10|5|df=yes}})</small><!--note that 0.01 was not released to public-->
| latest release version = {{wikidata|property|preferred|references|edit|Q14579|P348|P548=Q2804309}}
| latest release date = {{wikidata|qualifier|preferred|single|Q14579|P348|P548=Q2804309|P577}}
| latest preview version = {{wikidata|property|preferred|references|edit|Q14579|P348|P548=Q1072356}}
| latest preview date = {{wikidata|qualifier|preferred|single|Q14579|P348|P548=Q1072356|P577}}
| 마케팅대상         = 
| 언어               = [[영어]]
| 프로그램언어       = [[C (프로그래밍 언어)|C]], [[러스트 (프로그래밍 언어)|러스트]], [[어셈블리어]]
| 업데이트방식       = 
| 패키지관리자       = 
| 지원되는플랫폼     = 
| 커널형태           = [[모놀리식 커널]]
| UI                 = 
| 라이선스           = [[GNU 일반 공중 사용 허가서|GPL]]
| 웹사이트           = [https://kernel.org/ 공식 사이트]
}}

'''리눅스 커널'''({{llang|en|Linux kernel}})은 [[오픈 소스]] [[모놀리딕 커널|모놀리딕]] [[유닉스 계열]] 컴퓨터 [[운영 체제 커널]]이다. [[리눅스]] 계열의 운영 체제는 이 커널에 기반을 두며 [[개인용 컴퓨터]]와 [[서버]]와 같은 전통적인 컴퓨터 시스템들<ref>{{웹 인용 |title=README |publisher=git.kernel.org |url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=README;h=90a07658ede14840346eee6610648bcf4ec79997;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b |accessdate=12 November 2010 |보존url=https://archive.today/20120724163945/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=README;h=90a07658ede14840346eee6610648bcf4ec79997;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b |보존날짜=2012-07-24 |url-status=dead }}</ref>과 [[라우터]], [[무선 액세스 포인트]], [[PBX]], [[셋톱 박스]], [[FTA 리시버]], [[스마트 TV]], [[PVR]], [[네트워크 결합 스토리지|NAS 어플라이언스]] 등의 다양한 [[임베디드 장치]]에 보통 [[리눅스 배포판]]의 형태로 배치된다. [[태블릿 컴퓨터]], [[스마트폰]], [[스마트워치]]를 위한 [[안드로이드 (운영 체제)|안드로이드]] 운영 체제는 기능 구현을 위해 리눅스 커널이 제공하는 서비스들을 사용한다. [[데스크톱 컴퓨터]]에 채용하는 경우가 낮은 편이지만 리눅스 기반 운영 체제들은 모바일 장치에서부터 [[메인프레임 컴퓨터|메인프레임]]에 이르기까지 기타 거의 모든 컴퓨팅 부문을 지배하고 있다. 2017년 11월 기준으로, [[TOP500|세계 500대의 가장 강력한 슈퍼컴퓨터]]들은 모두 리눅스를 실행하고 있다.<ref name=top500stats/>

리눅스 커널은 1991년 [[리누스 토르발스]]가 자신의 개인용 컴퓨터를 위해 고안되어 개발<ref>{{웹 인용|last=Richardson |first=Marjorie |date=1 November 1999 |title=Interview: Linus Torvalds |publisher=Linux Journal |url=http://www.linuxjournal.com/article/3655 |accessdate=20 August 2009}}</ref> 되었고 크로스 플랫폼의 의도는 없었으나 그 이후로 다른 운영 체제나 커널 대비 더 다양한 컴퓨터 아키텍처를 지원하도록 확장되었다. 리눅스는 급속도로 기타 [[자유 소프트웨어]] 프로젝트, 특히 GNU 운영 체제로 이 커널을 채택한 개발자들과 사용자들을 매혹시켰다.<ref>{{서적 인용|last=Williams |first=Sam |date=March 2002 |title=Free as in Freedom: Richard Stallman's Crusade for Free Software |publisher=[[O'Reilly Media|O'Reilly]] |chapter=Chapter 9: The GNU General Public License |isbn=0-596-00287-4 |url=http://www.oreilly.com/openbook/freedom/ch09.html |accessdate=12 November 2010}}</ref> 리눅스 커널은 1,200개 이상의 회사의 12,000명에 가까운 프로그래머들의 기여를 받아왔으며, 여기에는 최대 소프트웨어 및 하드웨어 벤더들 일부가 포함된다.<ref>{{웹 인용|date=18 February 2015 |title=The Linux Foundation Releases Linux Development Report |publisher=[[Linux Foundation]] |url=http://www.linuxfoundation.org/news-media/announcements/2015/02/linux-foundation-releases-linux-development-report |accessdate=20 February 2015 |url-status=dead |archiveurl=https://web.archive.org/web/20160719042639/https://www.linuxfoundation.org/news-media/announcements/2015/02/linux-foundation-releases-linux-development-report |archivedate=19 July 2016 |df=dmy-all }}</ref><ref>{{웹 인용 |last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |date=April 2008 |title=Linux Kernel Development: How Fast it is Going, Who is Doing It, What They are Doing, and Who is Sponsoring It |url=http://go.linuxfoundation.org/who-writes-linux-2012 |quote=Since 2005, over 3700 individual developers from over 200 different companies have contributed to the kernel. |확인날짜=2018-03-25 |보존url=https://web.archive.org/web/20190912023947/https://storage.pardot.com/6342/48856/lf_kernel_development_2012.pdf |보존날짜=2019-09-12 |url-status=dead }}</ref>

[[리눅스 커널 API]]는 사용자 프로그램들이 커널과 통신하는 [[API]]로서 매우 안정적이고 [[유저스페이스]] 프로그램(GUI를 갖추고 다른 API에 의존하는 일부 프로그램)을 망가트리지 않는다는 것을 뜻한다. 커널 기능의 일부로서 [[장치 드라이버]]들은 하드웨어를 제어한다. 즉, 주류 장치 드라이버들은 매우 안정적임을 뜻한다. 그러나 다른 수많은 커널과 운영 체제와 달리 커널과 [[적재 가능 커널 모듈]](LKM) 간의 인터페이스가 매우 안정적으로 설계되었다는 것을 뜻하는 것은 아니다.<ref>{{웹 인용|last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |title=The Linux Kernel Driver Interface |url=https://www.kernel.org/doc/Documentation/stable_api_nonsense.txt |archiveurl=https://web.archive.org/web/20161221071118/https://www.kernel.org/doc/Documentation/stable_api_nonsense.txt |archivedate=21 December 2016 |website=Linux Kernel Documentation |accessdate=20 January 2016 |quote=This is being written to try to explain why Linux does not have a binary kernel interface, nor does it have a stable kernel interface. |url-status=dead |df= }}</ref>

전 세계 기여자들이 개발한 리눅스 커널은 [[자유-오픈 소스 소프트웨어]]의 저명한 예이며,<ref>{{메일링 인용|last=Torvalds |first=Linus |authorlink=리누스 토르발스 |date=25 September 2006 |title=Re: GPLv3 Position Statement |mailinglist=[[LKML]] |url=https://lkml.org/lkml/2006/9/25/161}}</ref> 버전에 따라 최대 6년을 지원한다. [[리눅스 커널 메일링 리스트]](LKML)에서 일일 개발 토론이 진행된다. 리눅스 커널은 [[GNU 일반 공중 사용권]] 버전 2 (GPLv2)로 출시되며,<ref name="COPYING">{{웹 인용 |title=Linux Kernel Copying<!-- this updates with the kernel, at citation was ;h=ca442d313d86dc67e0a2e5d584b465bd382cbf5c;hb=f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b --> |url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=COPYING |accessdate=25 September 2013 |quote=''Also note that the only valid version of the GPL as far as the kernel is concerned is _this_ particular version of the license (ie v2, not v2.2 or v3.x or whatever), unless explicitly otherwise stated.'' |보존url=https://archive.today/20121221041715/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=COPYING |보존날짜=2012-12-21 |url-status=dead }}</ref><ref name="torvalds2000-gplv2only">{{메일링 인용|mailinglist=[[LKML]] |url=http://lkml.iu.edu/hypermail/linux/kernel/0009.1/0096.html|title=Linux-2.4.0-test8 |last1=Torvalds |first1=Linus |authorlink1=리누스 토르발스 |date=8 September 2000 |accessdate=21 November 2015 |publisher=lkml.iu.edu |quote=''The only one of any note that I'd like to point out directly is the clarification in the COPYING file, making it clear that it's only _that_particular version of the GPL that is valid for the kernel. This should not come as any surprise, as that's the same license that has been there since 0.12 or so, but I thought I'd make that explicit''}}</ref> 일부는 자유가 아닌 여러 라이선스로 출시된 일부 [[펌웨어|펌웨어 이미지]]들을 포함하고 있다.<ref name="firmware">{{웹 인용|date=16 October 2002 |title=kernel/git/stable/linux-stable.git |quote=path: root/firmware/WHENCE |publisher=git.kernel.org |url=https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=firmware/WHENCE;hb=HEAD |archive-url=https://archive.today/20130113003817/http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=firmware/WHENCE;hb=HEAD |url-status=dead |archive-date=13 January 2013 |accessdate=21 August 2012 }}</ref>

== 역사 ==
{{참고|리눅스의 역사}}
[[파일:LinuxCon Europe Linus Torvalds 03 (cropped).jpg|섬네일|리누스 토르발스]]
1991년, [[리누스 토르발스]]는 스물 한살 나이의 [[핀란드]] [[헬싱키 대학교]]의 [[컴퓨터 과학]]부 학생이었을 시절 운영 체제에 대한 단순한 개념들에 대한 작업에 착수했다. 그는 [[x86 어셈블리어]]와 [[의사터미널|터미널 드라이버]]의 [[문맥 교환|문맥 교환기]]로 시작했다. 1991년 10월 25일, 토르발스는 [[유즈넷]]의 한 [[유즈넷 뉴스그룹|뉴스그룹]] comp.os.minix에 다음의 내용을 게시하였다:<ref name="Torvlads25Aug91">{{뉴스그룹 인용|last=Torvalds |first=Linus Benedict |authorlink=리누스 토르발스 |date=26 August 1991 |title=What would you like to see most in minix? |newsgroup=comp.os.minix |message-id=1991Aug25.205708.9541@klaava.Helsinki.FI |url=https://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b}}</ref>

{{quote|386(486) [[IBM PC/AT|AT]] 클론을 위한 (자유) 운영 체제를 만들고 있습니다.(취미일 뿐이며 gnu처럼 크고 프로페셔널하진 않아요) 4월부터 진행 중이며 준비 작업을 시작하고 있습니다. minix에서 제 운영 체제가 무언가를 닮았는지(타당한 이유로 파일 시스템의 동일한 물리적 설계), 사람들이 좋아하고 싫어하는 바에 대한 의견을 바랍니다.

저는 현재 [[bash]](1.08)와 [[GNU 컴파일러 모음|gcc]](1.40)을 포팅하였으며 동작하는 것으로 보입니다. 이 말은 수개월 안에 뭔가 실용적인 것을 하겠다는 이야기입니다. (중략) 그래요, minix 코드는 모두 자유이고 멀티스레드 fs가 포함됩니다. 포팅은 불가능하며(386 태스크 교환 등을 사용) AT 하드디스크 외에는 다른 것들은 지원하지 않을 겁니다. 왜냐하면 제가 가진 것이 그게 다거든요. :-(.''

(중략) 대부분은 C로 되어있지만 대부분의 사람들은 제가 C로 쓴 것을 호출하지 않을 겁니다. 386에 관해 제게 가르쳐준 프로젝트이기도 해서 제가 찾을 수 있었던 386의 가능한 모든 기능을 사용합니다. 이미 언급했듯이 페이징(아직 디스크는 아님)과 세그먼테이션을 위해 [[메모리 관리 장치|MMU]]를 사용합니다. 정말로 386에 의존하는 세그먼테이션입니다. (모든 태스크는 코드 및 데이터를 위해 64메가바이트의 세그먼트를 취하고 있으며 4Gb에 최대 64개의 태스크가 들어갑니다)}}

그 뒤로 수많은 사람들이 해당 프로젝트에 코드를 기여하였다. 초기에 [[MINIX]] 커뮤니티는 리눅스 커널에 코드와 아이디어를 기여하였다. 당시 [[GNU 프로젝트]]는 자유 운영 체제에 필요한 구성 요소들 중 다수를 만들어냈지만 자체 커널 [[GNU 허드]]는 완전하지 않았고 이용이 불가능했다. [[BSD]] 운영 체제는 법적 문제로부터 자유롭지 못했다. 초기 버전의 제한적인 기능에도 불구하고 리눅스는 급속도로 개발자들과 사용자들을 모아나갔다.

1991년 9월, 버전 0.01의 리눅스 커널이 핀란드 대학교와 [[FUNET]](리서치 네트워크)의 FTP 서버(ftp.funet.fi)에 공개되었다. 10,239줄의 코드였다. 1991년 10월, 버전 0.02의 리눅스 커널이 출시되었다.<ref>{{뉴스그룹 인용|last=Torvalds |first=Linus Benedict |authorlink=Linus Torvalds |date=5 October 1991 |title=Free minix-like kernel sources for 386-AT |newsgroup=comp.os.minix |message-id=1991Oct5.054106.4647@klaava.Helsinki.FI |url=https://groups.google.com/group/comp.os.minix/msg/2194d253268b0a1b}}</ref>

1991년 12월, 리눅스 커널 0.11이 출시되었다. 이 버전은 [[셀프 호스팅]]이 되는 최초 버전이었으며 리눅스 커널 0.11은 동일한 커널 버전을 실행 중인 컴퓨터에 의해 컴파일할 수 있었다. 토르발스가 1992년 2월에 버전 0.12를 출시하였을 때 상업적 배포를 허가하지 않았던 자신의 과거 자체 초안 라이선스를 넘어서서 [[GNU GPL]]을 채택했다.<ref name="Relnotes-0.12">{{웹 인용|last=Torvalds |first=Linus |authorlink=Linus Torvalds |title=Release Notes for Linux v0.12 |publisher=The Linux Kernel Archives |url=https://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.12 |accessdate=21 February 2007}}</ref>

1992년 1월 19일, 새로운 뉴스그룹 alt.os.linux에 첫 게시글이 제출되었다.<ref>{{뉴스그룹 인용|last=Summers |first=David W. |date=19 January 1992 |title=Troubles with Partitions |newsgroup=alt.os.linux |message-id=1992Jan19.085628.18752@cseg01.uark.edu |url=https://groups.google.com/group/alt.os.linux/msg/c638df159fa15159 |accessdate=7 January 2007}}</ref> 1992년 3월 31일, 뉴스그룹 이름은 comp.os.linux로 바뀌었다.<ref>{{뉴스그룹 인용|last=Clegg |first=Alan B. |date=31 March 1992 |title=It's here! |newsgroup=comp.os.linux |message-id= 1992Mar31.131811.19832@rock.concert.net |url=https://groups.google.com/group/comp.os.linux/msg/81fe3618c4803d1e |accessdate=7 January 2007}}</ref>

[[X 윈도 시스템]]이 리눅스에 포팅되었으며, 이로써 1992년 3월 리눅스 버전 0.95는 X를 실행할 수 있는 최초 버전이 되었다. 0.1에서 0.9x로의 큰 버전 번호 점프로 인해 크게 빠진 부분이 없이 버전 1.0이 임박한 것처럼 예측되었다. 그러나 이는 사실이 아닌 것으로 드러났으며 1993년부터 1994년 초까지 0.99의 15개의 개발판이 등장하였다.

1994년 3월 14일, 리눅스 커널 1.0.0이 출시되었으며 그 코드 줄 수는 176,250줄이다. 1995년 3월, 리눅스 커널 1.2.0이 출시되었으며, 코드 줄 수는 310,950줄이다.

리눅스 커널 버전 2는 1996년 6월 9일 출시되었으며 버전 2 헤더 아래에 추가 메이저 버전이 잇따라 출시되었다:
* 1999년 1월 25일 – 리눅스 커널 2.2.0 릴리스 (1,800,847 줄)
* 1999년 12월 18일 – [[IBM 메인프레임]] 패치(2.2.13용) 게시. 리눅스 커널이 기업급 머신에서 사용될 수 있게 허용
* 2001년 1월 4일 – 리눅스 커널 2.4.0 릴리스 (3,377,902 줄)
* 2003년 12월 17일 – 리눅스 커널 2.6.0 릴리스 (5,929,913 줄)

2004년을 기점으로 릴리스 프로세스가 변경되었으며 새로운 커널들이 2~3개월마다 정기적인 일정에 따라 출시를 시작했으며, 번호는 2.6.0, 2.6.1부터 2.6.39까지 이르렀다.

2011년 7월 21일, 토르발스는 리눅스 커널 3.0 릴리스를 발표하였다: "Gone are the 2.6.<bignum> days".<ref name="3.0 release">{{웹 인용|last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=21 July 2011 |title=Linux 3.0 release |publisher=[[Linux kernel mailing list]] |url=http://lkml.indiana.edu/hypermail/linux/kernel/1107.2/01843.html |accessdate=16 May 2013}}</ref> 이러한 버전 상승은 리눅스 2.6.39 대비 큰 기술적 변화에 대한 것은 아니었다.<ref>{{웹 인용|last=Leemhuis |first=Thorsten |date=19 May 2011 |title=Linux Kernel Data |work=The H |publisher=[[Heinz Heise]] |url=http://www.h-online.com/open/features/What-s-new-in-Linux-2-6-39-1242910.html?page=4 |accessdate=22 July 2011}}</ref> 단지 커널의 20주년을 표현한 것이다.<ref>{{웹 인용|last=Hachman |first=Mark |date=22 July 2011 |title=Linux 3.0 Released; Linus Torvalds Explains Why You Shouldn't Care |work=[[PC Magazine]] |publisher=[[지프 데이비스]] |url=https://www.pcmag.com/article2/0,2817,2388926,00.asp |accessdate=11 November 2014}}</ref> 시간 기반 릴리스 프로세스는 동일하게 유지되었다.

버전 3.10의 리눅스 커널은 2013년 6월 출시되었으며 15,803,499<!-- 16,955,489 including documentation, Makefiles, etc. -->줄이 포함되었으며,<ref>{{웹 인용|last=Leemhuis |first=Thorsten |date=1 July 2013 |title=What's new in Linux 3.10 |work=The H |publisher=[[Heinz Heise]] |url=http://www.h-online.com/open/features/What-s-new-in-Linux-3-10-1902270.html |accessdate=15 July 2013}}</ref> 버전 4.1은 2015년 6월 출시되었고 약 14,000명의 프로그래머가 기여한 코드를 포함 19,500,000줄 이상으로 성장하였다.<ref>{{웹 인용|authorlink=Michael Larabel |date=23 June 2014 |title=Linux Kernel At 19.5 Million Lines Of Code, Continues Rising |publisher=[[Phoronix]] |url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-19.5M-Stats |accessdate=23 June 2015}}</ref>

=== 타넨바움–토르발스 논쟁 ===
{{본문|타넨바움–토르발스 논쟁}}

[[MINIX]] 개발자 [[앤드루 타넨바움]]와 [[리누스 토르발스]] 사이에 리눅스가 [[마이크로커널]]이 아닌 [[모놀리딕 커널]]이라는 것이 논쟁의 주제였다.<ref>{{서적 인용|date=1999 |title=Open Sources: Voices from the Open Source Revolution |url=http://www.oreilly.com/catalog/opensources/book/appa.html |publisher=[[O'Reilly Media|O'Reilly]] |chapter=Appendix A: The Tanenbaum-Torvalds Debate |isbn=1-56592-582-3 |accessdate=22 November 2006}}</ref> 1992년 시작된 [[유즈넷]] 토론 그룹 <code>comp.os.minix</code>의 토론은 대체적으로 리눅스와 커널 아키텍처에 관한 것이었다.<ref>{{뉴스그룹 인용|title=LINUX is obsolete |last=Tanenbaum |first=Andy |authorlink=Andrew S. Tanenbaum |date=29 January 1992 |newsgroup=comp.os.minix |message-id=12595@star.cs.vu.nl |url=https://groups.google.com/group/comp.os.minix/msg/f447530d082cd95d |accessdate=10 May 2006}}</ref> 타넨바움은 마이크로커널이 모놀리딕 커널보다 우수하므로 리눅스는 구식이 되었다고 주장했다. 전통적인 모놀리딕 커널과 달리 리눅스의 장치 드라이버들은 [[적재 가능 커널 모듈]]로 쉽게 구성할 수 있으며 시스템을 실행하는 중에 적재되거나 적재가 해제된다. 이 주제는 2006년 5월 9일 논의되었고,<ref>{{웹 인용|url=http://www.realworldtech.com/forums/index.cfm?action=detail&id=66630&threadid=66595&roomid=11 |title=Hybrid kernel, not NT |last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=9 May 2006 |accessdate=6 January 2007}}</ref> 2006년 5월 12일 타넨바움은 긍정적인 문장을 썼다.<ref>{{웹 인용|title=Tanenbaum-Torvalds Debate: Part II |url=http://www.cs.vu.nl/~ast/reliable-os/ |last=Tanenbaum |first=Andy |authorlink=Andrew S. Tanenbaum |date=12 May 2006 |publisher=[[VU University Amsterdam]] |accessdate=6 January 2007}}</ref>

=== 대중화 ===
리눅스 커널을 포함하는 안드로이드 운영 체제의 인기가 상승하면서 이 커널이 모바일 장치를 위한 가장 대중적인 선택이 되었고 기타 설치 기반의 모든 운영 체제와 겨루게 되었다.<ref>{{보도자료 인용|title=Gartner Says Sales of Tablets Will Represent Less Than 10 Percent of All Devices in 2014 |url=http://www.gartner.com/newsroom/id/2875017 |location=[[Egham|Egham, UK]] |publisher=[[Gartner]] |date=15 October 2014 |accessdate=19 October 2014}}</ref><ref>{{웹 인용|url=https://techcrunch.com/2014/10/15/tablet-sales-growth-plummets-in-2014-as-android-smartphones-continue-to-soar-gartner |title=Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner |last=Lunden |first=Ingrid |date=15 October 2014 |work=[[TechCrunch]] |publisher=[[AOL]] |accessdate=23 October 2014}}</ref><ref>{{보도자료 인용|title=Global PC Shipments Exceed Forecast with Mild Improvement in Consumer Demand, While Apple Moves to #5 Spot, According to IDC |url=http://www.idc.com/getdoc.jsp?containerId=prUS25187214 |location=[[Framingham, Massachusetts|Framingham, MA]] |publisher=[[International Data Corporation|IDC]] |date=8 October 2014 |accessdate=19 October 2014 |url-status=dead |archiveurl=https://web.archive.org/web/20141011215307/http://www.idc.com/getdoc.jsp?containerId=prUS25187214 |archivedate=11 October 2014 |df=dmy-all }}</ref> 과거의 여러 햇수를 포함하여 2014년 말을 기준으로 30억 대의 안드로이드 스마트폰들이 판매된 것으로 추정되었다.

수많은 컨슈머 라우터들 또한 리눅스 커널을 사용하며<ref>{{웹 인용|url=http://www.extremetech.com/computing/190959-shellshock-a-deadly-new-vulnerability-that-could-lay-waste-to-the-internet |title=Shellshock: A deadly new vulnerability that could lay waste to the internet (updated) |first=Sebastian |last=Anthony |date=29 September 2014 |work=[[ExtremeTech]] |publisher=[[지프 데이비스]] |accessdate=23 October 2014 |quote=most consumer routers run an embedded version of Linux <!--", and a CGI-capable web server" hate to including Shellshock article to support this as most use busybox and not bash; anyone know a better better source for most or dominant or billions of Linux routers?-->}}</ref> 그 외에 [[스마트 TV]], [[셋톱 박스]], [[웹캠]]과 같은 다양한 기타 [[임베디드 리눅스|임베디드 장치]]들 또한 마찬가지이다. 리눅스 커널을 포함하는 수많은 데스크톱 [[리눅스 배포판]]들이 존재하지만 리눅스 배포판의 사용률 면에서는 다른 운영 체제에 비해 낮은 편이다.

== 구조 ==
{{본문|vmlinux}}
[[파일:Linux kernel map.png|섬네일|300px|오른쪽|리눅스 커널 지도]]
[[파일:Linux kernel ubiquity.svg|섬네일|300px|리눅스 커널은 소프트웨어를 위한 공통 플랫폼을 제공([[사유 소프트웨어]] 포함 가능)하면서 다양한 하드웨어 구조를 지원한다.]]
리눅스 커널은 진정한 [[선점 스케줄링|선점형 멀티태스킹]] ([[사용자 모드]] 및, 2.6 시리즈 이후의 경우 [[커널 모드]]<ref>{{웹 인용
 | url = http://kernelnewbies.org/FAQ/Preemption
 | 제목 = FAQ: Preemption
 | date = 22 August 2009 | accessdate = 7 May 2015
 | website = kernelnewbies.org
}}</ref><ref name="lwn-22912">{{웹 인용
 | url = https://lwn.net/Articles/22912/
 | 제목 = Driver porting: the preemptible kernel
 | date = 24 February 2003 | accessdate = 7 May 2015
 | author = Jonathan Corbet | publisher = [[LWN.net]]
}}</ref> 까지), [[가상 메모리]], [[공유 라이브러리]], [[디맨드 페이징|디맨드 로딩]], 공유 [[카피 온 라이트]] 실행 파일([[KSM]] 공유), [[메모리 관리]], [[인터넷 프로토콜 스위트]], [[스레드|스레딩]]을 지원하는 [[모놀리딕 커널]]이다.

[[장치 드라이버]]와 커널 확장 기능은 [[커널 공간]](수많은 [[중앙 처리 장치|CPU]] [[CPU 아키텍처|구조]]에서 [[보호링|링 0]])에서 실행되며, 하드웨어에 대한 모든 접근 권한이 있으나 [[사용자 공간]]에서의 실행은 일부 예외가 있는데 이를테면 [[FUSE]]/CUSE 기반 파일 시스템들, UIO의 일부가 그러하다.<ref>{{웹 인용
 | url = https://lwn.net/Articles/308445/
 | title = Character devices in user space
 | date = 25 November 2008 | accessdate = 7 May 2015
 | author = Jake Edge | publisher = [[LWN.net]]
}}</ref><ref>{{웹 인용
 | url = https://lwn.net/Articles/232575/
 | title = UIO: user-space drivers
 | date = 2 May 2007 | accessdate = 7 May 2015
 | author = Jonathan Corbet | publisher = [[LWN.net]]
}}</ref> 대부분의 사람들이 리눅스와 함께 사용하는 [[X 윈도 시스템|그래픽스 시스템]]은 커널 내에서 실행되지 않는다. 표준 모놀리딕 커널과 달리 장치 드라이버는 쉽게 [[모듈 (리눅스)|모듈]]로 구성되며 시스템이 실행 중인 동안에 적재되거나 적재가 해제된다. 또, 표준 모놀리딕 커널과 달리 장치 드라이버들은 특정한 조건에서 선점이 가능하다. 즉, 이 기능은 [[하드웨어 인터럽트]]를 정확히 관리하고 [[대칭형 다중 처리]]를 더 양호하게 지원하기 위해 추가되었다.<ref name="lwn-22912" /> 리눅스 커널은 자체적으로 [[ABI|바이너리 커널 인터페이스]]가 없다.<ref>{{웹 인용|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |url-status=dead |archiveurl=https://archive.today/20131104101751/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archivedate=4 November 2013 |df= }}</ref>

하드웨어 또한 파일 계층에 통합되어 있다. 장치 드라이버들은 {{Mono|[[Devfs|/dev]]}} 또는 {{Mono|[[/sys]]}} 디렉터리의 엔트리를 통해 사용자 응용 프로그램들과 통신한다.<ref name="tldp file">{{웹 인용|url=http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/index.html |title=Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy |last=Nguyen |first=Binh |date=30 July 2004 |publisher=The Linux Documentation Project |accessdate=28 November 2012}}</ref> 프로세스 정보 또한 {{Mono|[[procfs|/proc]]}} 디렉터리를 통해 파일 시스템에 매핑된다.<ref name="tldp file" />

{{리눅스 계층}}

=== 프로그래밍 언어 ===
리눅스 커널은 [[어셈블리어]](GCC의 AT&T 스타일 문법)로 작성된 수많은 짧은 코드와 더불어 [[GNU 컴파일러 모음|GCC]](수많은 확장과 변경 사항을 표준 C에 도입)에 의해 지원되는 [[C (프로그래밍 언어)|C 프로그래밍 언어]] 버전으로 작성되어 있다. 지원되는 C 확장 덕분에 GCC는 한동안 리눅스 커널을 올바르게 빌드할 수 있는 유일한 컴파일러였다.

=== 컴파일러 호환성 ===
[[GNU 컴파일러 모음|GCC]]는 리눅스 커널 소스의 기본 [[컴파일러]]이다. 2004년, [[인텔]]은 [[인텔 C++ 컴파일러|자사의 C 컴파일러]]가 컴파일할 수 있도록 커널을 수정했다고 주장하였다.<ref>{{웹 인용|url=http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |title=Linux kernel patch for Intel Compiler |last=Kubbilun |first=Ingo A. |date=2 June 2004 |publisher=Pyrillion.org |accessdate=12 November 2010 |archiveurl=https://web.archive.org/web/20110722090031/http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html |archivedate=22 July 2011 |language=de |url-status=dead |df= }}</ref> 2009년 2.6.22 커널의 수정판에서 이같은 또다른 성공이 보고되었다.<ref>{{웹 인용|url=http://linux.slashdot.org/article.pl?sid=09/02/26/2216241 |title=High Performance Linux Kernel Project — LinuxDNA |author=timothy |date=26 February 2009 |work=[[Slashdot|Slashdot Linux]] |publisher=[[Dice Holdings]] |accessdate=30 October 2010}}</ref><ref>{{웹 인용|url=http://www.linuxjournal.com/content/linuxdna-supercharges-linux-intel-cc-compiler |title=LinuxDNA Supercharges Linux with the Intel C/C++ Compiler |last=Ryan |first=Justin |date=25 February 2009 |work=[[Linux Journal]] |publisher=Belltown Media, Inc. |accessdate=30 October 2010}}</ref>

2010년 이후로 C 언어의 다른 컴파일러인 [[클랭]]으로 리눅스 커널을 빌드하려는 노력이 진행되고 있다.<ref>{{메일링 인용| url=http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |title=Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts) |last=Lelbach |first=Bryce |mailing-list=cfe-dev |date=25 October 2010 |archiveurl=https://web.archive.org/web/20150907044958/http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html |archivedate=7 September 2015}}</ref> 2014년 4월 12일 기준으로 공식 커널은 대부분 클랭으로 컴파일이 가능하다.<ref>{{웹 인용|url=https://www.phoronix.com/scan.php?page=news_item&px=MTY2MjY |title=Linux 3.15 Can Almost Be Compiled Under LLVM's Clang |last=Larabel |first=Michael |authorlink=Michael Larabel |date=12 April 2014 |publisher=[[Phoronix]] |accessdate=10 June 2014}}</ref><ref>{{웹 인용|url=https://www.phoronix.com/scan.php?page=news_item&px=MTY2MjY |title=Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel |last=Larabel |first=Michael |authorlink=Michael Larabel |publisher=[[Phoronix]] |accessdate=20 November 2014}}</ref> 이러한 노력에 따른 프로젝트의 이름은 LLVMLinux이며, 이는 클랭 기반 [[LLVM]] 컴파일러 구조를 따른 것을 뜻한다.<ref>{{웹 인용|url=https://lwn.net/Articles/549203/ |title=LFCS: The LLVMLinux project |last=Edge |first=Jake |date=7 May 2013 |publisher=[[LWN.net]] |accessdate=3 March 2015}}</ref> LLVMLinux는 리눅스 커널이나 LLVM을 포크하는 것이 목적이 아니기 때문에 업스트림 프로젝트에 제출되는 패치들로 구성된 메타 프로젝트로 볼 수 있다. 클랭으로 리눅스 커널을 컴파일할 수 있음으로 인한 이점에는 GCC 대비 더 빠른 컴파일 속도가 있으며 커널 개발자들은 더 짧아진 컴파일러 시간으로 인해 더 빠른 워크플로의 이점을 취할 수 있게 된다.<ref>{{웹 인용|url=http://llvm.org/devmtg/2014-02/slides/moller-llvmlinux.pdf |title=LLVMLinux: The Linux Kernel with Dragon Wings |last=Möller |first=Jan-Simon |date=2 February 2014 |publisher=[[LLVM|LLVM Project]] |accessdate=3 March 2015}}</ref>

=== 인터페이스 ===
{{본문|리눅스 커널 인터페이스|분류:리눅스 커널의 인터페이스}}
[[파일:Linux kernel interfaces.svg|섬네일|300px|4개의 인터페이스로 구별된다: 2개는 내부→커널, 2개는 커널↔사용자공간 사이.]]
[[파일:Linux AMD graphics stack.svg|섬네일|300px|XDC2014에서, AMD의 Alex Deucher는 통합 커널 모드 드라이버를 발표하였다.<ref>{{웹 인용|url=http://wiki.x.org/wiki/Events/XDC2014/XDC2014DeucherAMD/ |title=AMD's New Unified Open Source Driver |last=Deucher |first=Alex |date=7 October 2014 |publisher=[[X.Org Foundation]] |accessdate=21 January 2015}}</ref> 사유 리눅스 그래픽스 드라이버 {{Mono|[[AMD Catalyst|libGL-fglrx-glx]]}}는 [[메사 3D]]와 함께 동일한 [[다이렉트 렌더링 매니저|DRM]] 인프라스트럭처를 공유한다. 안정적인 커널 내 [[응용 프로그램 이진 인터페이스|ABI]]가 없기 때문에 AMD는 카탈리스트가 사용하는 이전 [[바이너리 블롭]]에 지속적으로 맞추어야 했다.]]
표준을 준수하는 것은 리눅스 커널의 내부 기능에 대한 포괄적인 정책이다. 다른 규칙으로는 해당 구성 요소를 사용하는 사유(proprietary)의 사용자 공간 소프트웨어가 있을 경우에는 커널의 구성 요소가 리눅스 커널에 수용되지 않는다는 점이다.
==== 커널-사용자공간 API ====
{{본문|POSIX|단일 유닉스 규격}}
소스 코드 이식성은 표준을 준수하여 작성된 C 프로그램이 동일 표준을 준수하는 시스템에서 성공적으로 컴파일되고 실행 가능함을 보증한다. 리눅스 커널, [[GNU C 라이브러리]], 관련 유틸리티들이 고수하려 애쓰는, 프로그램의 소스 코드 이식성을 달성하는데 초점을 둔 관련 표준들은 [[POSIX]]와 [[단일 유닉스 규격]]이다.

커널의 시스템 호출 인터페이스를 대표하는 리눅스 커널의 [[리눅스 커널 인터페이스|리눅스 커널 API]]는 사용 가능한 [[시스템 호출]]로 구성되어 있다.

==== 커널-사용자공간 ABI ====
{{본문|리눅스 기본 규격}}
이진 이식성은 주어진 하드웨어 플랫폼에 맞추어 컴파일된 프로그램이라면 표준을 준수하는 기타 하드웨어 플랫폼에서 컴파일된 형태로 실행이 가능함을 보증할 수 있다. 이진 이식성은 리눅스 커널 기반의 운영 체제용 [[독립 소프트웨어 벤더]](ISV) 응용 프로그램들의 상업적 독자 생존의 필수 요건이다. 바이너리 호환은 소스 코드 이식성보다 훨씬 더 요구사항이 많다. 즉, 2014년 2월 기준으로 바이너리 호환성과 관련된 유일한 표준은 [[리눅스 기본 규격]](LSB)이다.
==== 커널 내 API ====
각기 다른 하위 시스템들과 하위 시스템들의 하위 시스템들 간 활용되는 커널 내부 API가 여럿 있다. 이들 가운데 일부는 여러 릴리스를 통해 안정적으로 유지되고 있고 다른 것들은 그렇지 않다. 커널 내 API와 관련한 어떠한 보증도 없다. 유지보수자들과 기여자들은 언제든지 이것들을 자유로이 늘려나가거나 바꿀 수 있다.<ref>{{웹 인용|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |author=Greg Kroah-Hartman |accessdate=10 April 2015 |url-status=dead |archiveurl=https://archive.today/20131104101751/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archivedate=4 November 2013 |df= }}</ref>

커널 내 API의 예에는 다음 계열의 장치 드라이버를 위한 소프트웨어 프레임워크/API를 포함한다.

* [[Video4Linux]]- 비디오 하드웨어 캡처용
* [[고급 리눅스 사운드 아키텍처]] (ALSA)- 사운드 카드용
* [[뉴 API]]- [[네트워크 인터페이스 컨트롤러]]용
* [[다이렉트 렌더링 매니저]]- 그래픽스 가속기용
* [[KMS 드라이버]]- [[디스플레이 컨트롤러]]용
* [[mac80211]]- 무선 네트워크 인터페이스 컨트롤러용<ref>{{웹 인용|url=https://wireless.wiki.kernel.org/en/developers/Documentation/mac80211 |title=About mac80211 |publisher=Linux Kernel Organization, Inc. |accessdate=8 June 2014}}</ref>
* WEXT- 무선 네트워크 인터페이스 컨트롤러용 (쓰이지 않음).
==== 커널 내 ABI ====
일부 단체들은 여러 릴리스를 통해 커널 내 [[응용 프로그램 이진 인터페이스|ABI]]의 정의 및 유지보수를 굳건히 지원해왔다. 이를테면 사유 커널 모듈을 출시하고 바이너리 전용 소프트웨어(예: 장치 드라이버)를 배포하는 하드웨어 제조업체들에게 이익을 준다. 그러나 리눅스 커널 개발자들은 안정적인 커널 내 ABI를 유지보수하지 않기로 했다.<ref>{{웹 인용|url=http://abi-laboratory.pro/tracker/timeline/linux/|title=Report on ABI changes in the Linux kernel|publisher=Andrey Ponomarenko's ABI laboratory|date=17 March 2016}}</ref> 이로써 리눅스 커널 개발을 더 진척시킬 수 있게 되었다.

=== 기술적 기능 ===
==== 선점 ====
{{참고|커널 선점}}
[[파일:IO stack of the Linux kernel.svg|섬네일|오른쪽|upright=2.0|다양한 계층의 리눅스 커널 스토리지 스택 내의 [[입출력 스케줄러]]의 위치.<ref>{{웹 인용
 | url = https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram
 | title = Linux Storage Stack Diagram
 | date = 1 June 2015 | accessdate = 8 June 2015
 | author1 = Werner Fischer | author2 = Georg Schönberger
 | publisher = Thomas-Krenn AG
}}</ref>]]
리눅스 커널은 특정한 조건에서 [[선점 스케줄링]]을 제공한다. 리눅스 커널 2.4까지 오직 사용자 프로세스들만이 선점 형태였다. 이를테면 타임 퀀텀 만기(time quantum expiration) 외에도 [[사용자 모드]] 내의 현재 프로세스의 실행은 더 높은 동적 우선 순위 프로세스가 <code>TASK_RUNNING</code> 상태에 진입할 때 인터럽트 처리된다.<ref>{{서적 인용|last1=Bovet |first1=Daniel P. |last2=Cesati |first2=Marco |date=October 2000 |title=Understanding the Linux Kernel |url=http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |publisher=[[O'Reilly Media|O'Reilly]] |chapter=Chapter 10: Process Scheduling |isbn=0-596-00002-2 |accessdate=15 October 2011 |archiveurl=https://web.archive.org/web/20140921000832/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |archivedate=21 September 2014 |url-status=dead |df= }}</ref> 2.6 시리즈의 리눅스 커널에 들어서면서 [[커널 모드|커널 코드]]를 실행하는 태스크를 인터럽트할 수 있는 기능이 추가되었으나 이를 통해서도 커널 코드의 모든 부분을 선점할 수 있는 것은 아니다.<ref>{{웹 인용|url=http://www.ibm.com/developerworks/linux/library/l-inside/index.html |title=Towards Linux 2.6, A look into the workings of the next new kernel |last=Santhanam |first=Anand |date=23 September 2003 |publisher=[[IBM Global Services]] |accessdate=15 October 2011 |archiveurl=https://web.archive.org/web/20130927200239/http://www.ibm.com/developerworks/linux/library/l-inside/index.html |archivedate=27 September 2013 |url-status=dead |df= }}</ref>

리눅스 커널에는 각기 다른 스케줄러 클래스가 포함되어 있다.<ref name="moshe">{{웹 인용|url=http://www.linuxjournal.com/article/3910 |title=The Linux Scheduler |last=Bar |first=Moshe |date=1 April 2000 |work=[[Linux Journal]] |publisher=Belltown Media, Inc. |accessdate=14 April 2012}}</ref> 기본적으로 커널은 2.6.23 버전의 커널에 도입된 [[Completely Fair Scheduler]]라는 이름의 스케줄러 매커니즘을 사용한다.<ref>{{메일링 인용|title=&#91;patch&#93; Modular Scheduler Core and Completely Fair Scheduler &#91;CFS&#93; |url=https://lwn.net/Articles/230501/ |last=Molnár |first=Ingo |authorlink=Ingo Molnár |date=13 April 2007 |mailinglist=[[LKML]] |accessdate=14 April 2012}}</ref>
내부적으로 이 기본 스케줄러 클래스는 <code>SCHED_OTHER</code>로 알려져 있으나, 커널은 또한 POSIX를 준수하는<ref name="posix1b">{{웹 인용|url=http://www.opengroup.org/onlinepubs/009695399|title=IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)}}</ref> <code>SCHED_FIFO</code>(실시간 스케줄링 클래스, 즉 실시간 [[FIFO]])와 <code>SCHED_RR</code>(실시간 [[라운드 로빈 스케줄링|라운드 로빈]])을 포함하고 있으며, 둘 다 기본 클래스보다 더 높은 우선순위를 가진다.<ref name="moshe" />

실시간 리눅스 커널 패치 <code>PREEMPT_RT</code>를 사용함으로써, 임계영역, 인터럽트 핸들러, 인터럽트 비활성화(interrupt disable) 코드 시퀀스의 완전한 선점을 지원할 수 있다.<ref>{{웹 인용|url=https://lwn.net/Articles/146861/ |title=A realtime preemption overview |last=McKenney |first=Paul |date=10 August 2005 |publisher=[[LWN.net]] |accessdate=5 February 2012}}</ref> 실시간 리눅스 커널 패치의 부분적인 메인라인 통합을 통해 이미 커널 메인라인에 일부 기능이 도입된 상황이다.<ref>{{웹 인용|url=https://www.osadl.org/Realtime-Linux.projects-realtime-linux.0.html |title=OSADL Project: Realtime Linux |publisher=[[OSADL]] |accessdate=5 February 2012}}</ref> 선점은 [[레이턴시]]를 개선하고, 응답 속도를 증가시키며 리눅스를 데스크톱 및 [[실시간 컴퓨팅|실시간]] 애플리케이션에 더 적합하도록 만들어준다. 구 버전의 커널은 전체 커널에 대한 동기화를 위해 이른바 [[자이언트 락|빅 커널 락]]을 가지고 있었으며 2011년 Arnd Bergmann에 의해 최종적으로 제거되었다.<ref>{{웹 인용|url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4ba8216cd90560bc402f52076f64d8546e8aefcb |archive-url=https://archive.today/20120720043351/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4ba8216cd90560bc402f52076f64d8546e8aefcb |url-status=dead |archive-date=20 July 2012 |title=BKL: That's all, folks |last=Bergmann |first=Arnd |date=5 March 2011 |publisher=Linux Kernel Organization, Inc. |accessdate=20 February 2012 }}</ref>

[[최단 마감 우선 스케줄링|최단 마감 우선 알고리즘]](EDF)을 구현하는 <code>[[SCHED DEADLINE]]</code>라는 이름의 추가적인 스케줄링 정책이 커널 버전 3.14에 추가되었고 2014년 3월 30일 출시되었다.<ref>{{웹 인용|url=https://www.phoronix.com/scan.php?page=news_item&px=MTU4Mjg |title=The Linux 3.14 Kernel Already Has Many Exciting Features |last=Larabel |first=Michael |authorlink=Michael Larabel |date=24 January 2014 |publisher=[[Phoronix]] |accessdate=3 February 2014}}</ref><ref>{{웹 인용|url=http://kernelnewbies.org/Linux_3.14#head-651929cdcf19cc2e2cfc7feb16b78ef963d195fe |title=Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling |date=30 March 2014 |website=kernelnewbies.org |accessdate=2 April 2014}}</ref>

==== 이식성 ====
{{참고|리눅스가 지원하는 컴퓨터 아키텍처 목록|리눅스 지원 장치}}
[[파일:Ipod linux booting kernel.jpg|섬네일|[[아이팟리눅스]]를 부팅하고 있는 [[아이팟]].]]
리눅스가 처음부터 [[이식 (컴퓨팅)|이식]]을 위해 설계된 것은 아니지만,<ref name="Torvlads25Aug91" /><ref name="opensources">{{서적 인용|last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=January 1999 |title=Open Sources: Voices from the Open Source Revolution |url=http://www.oreilly.com/openbook/opensources/book/linus.html |publisher=[[O'Reilly Media|O'Reilly]] |chapter=The Linux Edge |isbn=1-56592-582-3 |accessdate=13 October 2013}}</ref> 현재 가장 널리 이식된 운영 체제 커널들 가운데 하나이며 [[ARM 아키텍처]]에서부터 IBM [[z/아키텍처]] [[메인프레임 컴퓨터]]에 이르기까지 다양한 범위의 시스템에서 실행된다. 리눅스의 오리지널 386 아키텍처를 넘어선 첫 이식은 [[코모도어 아미가|아미가]] 사용자들의 [[모토로라 68000]] 플랫폼에서 수행되었으며, 해당 사용자들은 커널의 주요 부분을 대체함으로써 이를 수행하였다. 토르발스가 모토로라 버전을 실제 포트가 아닌 [[포크 (소프트웨어 개발)|포크]]의 하나이자 "리눅스 계열 운영 체제"로 간주했던 만큼 커널의 수정은 매우 중요했다.<ref name="opensources"/> 이는 토르발스가 경쟁 컴퓨팅 아키텍처로의 이식을 용이케 하기 위해 커널 코드의 재구성이 필요하다는 추진제 역할을 했다. 최초의 리눅스 보증 포트는 [[디지털 이큅먼트 코퍼레이션|DEC]] [[알파 AXP]] 64비트 플랫폼을 대상으로 했으며 1995년 5월 DECUS에서 시연되었고<ref>{{웹 인용|url=http://www.linuxjournal.com/article/1178?page=0,1|title=Porting Linux to the DEC Alpha: The Kernel and Shell}}</ref> 둘 다 하나의 소스 트리에서 386과 알파를 지원한다.<ref name="opensources" /> DEC는 같은 해 토르발스가 리눅스를 64비트로 포팅하는데 필수적인 하드웨어를 공급하는 일을 맡았다.<ref>{{웹 인용|url=http://www.linuxjournal.com/article/1150?page=0,0|title=Linux on Alpha: A Strategic Choice}}</ref>

리눅스는 IBM의 [[블루 진]](Blue Gene)과 그 밖의 속도가 가장 빠른 [[슈퍼컴퓨터]](최상위의 중국 것 포함)의 주 운영 체제로서 실행된다. 2017년 11월 기준으로 전 세계 [[TOP500|500대의 최고 속도의 슈퍼컴퓨터]]들 모두 여러 종류의 리눅스를 구동한다.<ref name=top500stats>{{웹 인용|url=http://www.top500.org/statistics/details/osfam/1 |title=TOP500 Supercomputer Sites: Operating system Family / Linux |publisher=Top500.org|accessdate=13 November 2017}}</ref> 리눅스는 또한 [[애플]] [[아이팟]], [[아이폰]] 등의 여러 휴대용 장치에도 이식되었다.<ref>{{웹 인용|url=http://www.pcworld.com/article/195789/android_now_running_on_iphone_3g.html |title=Android Now Running On iPhone 3G |last=Wang |first=David |date=6 May 2010 |work=TechHive |publisher=[[International Data Group|IDG]] |accessdate=11 July 2010}}</ref> 휴대전화용으로 개발된 일부 운영 체제들은 수정된 리눅스 커널 버전을 사용하며 여기에는 구글의 [[안드로이드 (운영 체제)|안드로이드]], [[파이어폭스 OS]], HP [[웹OS]], 노키아 [[마에모]], 졸라 [[세일피시 OS]]가 포함된다.<ref>{{웹 인용|url=http://www.kroah.com/log/linux/android-kernel-problems.html |title=Android and the Linux kernel community |last=Kroah-Hartman |first=Greg |authorlink=Greg Kroah-Hartman |date=2 February 2010 |accessdate=3 February 2010 |quote=''This means that any drivers written for Android hardware platforms, can not get merged into the main kernel tree because they have dependencies on code that only lives in Google's kernel tree, causing it to fail to build in the kernel.org tree. Because of this, Google has now prevented a large chunk of hardware drivers and platform code from ever getting merged into the main kernel tree. Effectively creating a kernel branch that a number of different vendors are now relying on.''}}</ref><ref>{{웹 인용|url=http://www.zdnet.com/article/linux-developer-explains-android-kernel-code-removal/ |title=Linux developer explains Android kernel code removal |last=Meyer |first=David |date=3 February 2010 |work=[[ZDNet]] |publisher=[[CBS Interactive]] |accessdate=3 February 2010}}</ref><ref>{{서적 인용|date=2008 |title=maemo Technology Overview |url=http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |publisher=[[Nokia]] |chapter=Chapter 03: maemo Platform Overview |accessdate=9 April 2010 |archiveurl=https://web.archive.org/web/20080616191310/http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Technology_Overview/Chapter_03_maemo_Platform_Overview.html |archivedate=16 June 2008 |url-status=dead |df= }}</ref>

==== 커널 패닉과 웁스 ====
{{본문|커널 패닉|리눅스 커널 웁스}}
[[파일:Kernel-panic.jpg|섬네일|리눅스 커널 패닉의 예]]
리눅스에서 [[커널 패닉|패닉]]은 커널에 의해 감지되었으나 복구할 수 없는 시스템 오류를 말하며, 이는 [[사용자 공간]] 코드에 의해 감지된 비슷한 오류와는 반대된다. 커널 코드는 헤더 파일 <code>sys/system.h</code>에 위치한 <code>panic</code> 함수를 호출함으로써 이러한 조건을 지시하는 것이 가능하다. 그러나 대부분의 패닉들은 유효하지 않은 메모리 주소에 대한 참조 등 커널 코드 내에서 처리되지 못한 프로세서 [[예외 처리|예외]]의 결과물이다. 이것들은 일반적으로 패닉을 일으키게 만든 호출 체인 내의 어딘가의 [[컴퓨터 버그|버그]]로 인지된다. 문제가 되는 RAM 셀, [[펜티엄 FDIV 버그|프로세스 버그]]로 인해 발생된 프로세스 내 산술 기능의 오류, 프로세서의 과열/손상, [[소프트 오류]] 등의 하드웨어의 고장으로 인식할 수도 있다.

커널 내에서 치명적이지 않은 버그의 보고는 [[리눅스 커널 웁스|웁스]]라고 한다. 즉, 리눅스 커널의 올바른 동작에서 파생된 것들은 보증된 신뢰성과 함께 지속적인 운용을 허용할 수 있다.<ref>{{메일링 인용|url=http://lkml.iu.edu/hypermail/linux/kernel/0303.1/0009.html |title=Re: what's an OOPS |last=Bradford |first=John |date=8 March 2003 |mailinglist=[[LKML]] |accessdate=30 October 2010}}</ref> 이러한 충돌 보고들은 자동으로 수집되며 다양한 소프트웨어에 의해 상위 보고가 가능하다. 이를테면 커널웁스,<ref>{{웹 인용|url=http://linux.die.net/man/8/kerneloops |title=kerneloops(8) - Linux man page |publisher=Linux.die.net |accessdate=30 October 2010}}</ref> ABRT ([[페도라 (운영 체제)|페도라]])<ref>{{웹 인용|url=http://fedoraproject.org/wiki/Features/ABRTF12 |title=Features/ABRTF12 |date=3 August 2009 |publisher=FedoraProject |accessdate=30 October 2010}}</ref>, apport ([[우분투 (운영 체제)|우분투]]) 등이 있다. KernelOops.org는 이러한 보고를 수집하고 통계를 자신들의 웹사이트에 게시한다.<ref>{{웹 인용 |url=http://www.kerneloops.org |title=Kerneloops.org |publisher=Kerneloops.org |accessdate=5 March 2014 |보존url=https://web.archive.org/web/20121004201248/http://www.kerneloops.org/ |보존날짜=2012-10-04 |url-status=dead }}</ref>

커널 패닉 메시지는 그래픽 데스크톱을 사용할 때 등 일부 상황에서는 눈으로 볼 수 있도록 출력되지 않을 수 있다. 이러한 조건에서 디버깅하려면 직렬 포트 콘솔을 부착하는 등의 다른 수단을 사용할 수 있다.
==== 라이브 패치 ====
[[Ksplice]], [[kpatch]], [[kGraft]] 등의 재기동 없는 업데이트도 커널에 적용할 수 있다. 라이브 커널 패치를 위한 최소한의 파운데이션은 2015년 4월 12일 출시된 커널 버전 4.0의 리눅스 커널 메인라인에 통합되었다. 주로 커널의 [[ftrace]] 기능에 기반을 둔 "livepatch"라는 이름으로 된 해당 파운데이션들은 kGraft와 kpatch를 통해 핫 패치를 지원할 수 있는 공통 코어를 형성하며 이는 핫 패치를 포함하는 커널 모듈을 위한 [[API]], 그리고 사용자 공간 관리 유틸리티를 위한 [[응용 프로그램 이진 인터페이스]](ABI)를 제공함으로써 이루어진다. 그러나 리눅스 커널 4.0에 포함된 공통 코어는 오직 [[x86]] 아키텍처만 지원하며 핫 패치가 적용되더라도 [[함수]] 수준의 일관성을 보증하기 위한 매커니즘은 제공하지 않는다. 2015년 4월 기준으로 kpatch와 kGraft를 리눅스 커널 메인라인에 의해 제공되는 공통 라이브 패치 코어로 이식하는 작업이 진행 중이다.<ref>{{웹 인용
 | url = http://kernelnewbies.org/Linux_4.0#head-9aa7c8499b42911a48c02b24f367bf2bc6db8606
 | title = Linux kernel 4.0, Section 1.2. Live patching
 | date = 26 April 2015 | accessdate = 27 April 2015
 | website = kernelnewbies.org
}}</ref><ref>{{웹 인용
 | url = https://lwn.net/Articles/634649/
 | title = A rough patch for live patching
 | date = 25 February 2015 | accessdate = 27 April 2015
 | author = Jonathan Corbet | publisher = [[LWN.net]]
}}</ref><ref>{{웹 인용
 | url = https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1d9c5d79e6e4385aea6f69c23ba543717434ed70
 | title = kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree)
 | date = 11 February 2015 | accessdate = 27 April 2015
 | website = [[kernel.org]]
}}</ref>

=== 보안 ===
커널 버그의 대부분이 잠재적인 보안 결함을 보이기 때문에 [[컴퓨터 보안]]은 리눅스 커널과 관련하여 매우 공론화된 주제이다. 이를테면 [[권한 확대]]를 허용하거나 [[서비스 거부 공격]](DoS 공격) 벡터를 생성할 수 있다. 해가 거듭되면서 리눅스 커널에서는 이러한 수많은 결함들이 발견되어 수정되었다.<ref>{{서적 인용|last1=Mookhey |first1=K. K. |last2=Burghate |first2=Nilesh |date=1 July 2005 |title=Linux: Security, Audit and Control Features |url=https://books.google.com/books?id=-kD0sxQ0EkIC&pg=PA14 |location=USA |publisher=[[ISACA]] |page=14 |isbn=1-893209-78-4 |accessdate=31 December 2010}}</ref> 리눅스 커널 보안 개선을 위해 새로운 보안 기능들이 종종 구현된다.<ref>{{서적 인용|last=Hatch |first=Brian |date=15 July 2008 |title=Hacking Exposed Linux: Linux Security Secrets and Solutions |url=https://books.google.com/books?id=f5Vz08spzw8C&pg=PA524 |publisher=[[McGraw-Hill Osborne Media]] |page=524 |isbn=0-07-226257-5 |accessdate=31 December 2010}}</ref><ref>{{서적 인용|last=Jaeger |first=Trent |date=7 October 2008 |title=Operating System Security |url=https://books.google.com/books?id=P4PYPSv8nBMC&pg=PA122 |publisher=Morgan and Claypool Publishers |page=122 |isbn=1-59829-212-9 |accessdate=31 December 2010}}</ref>

비평가들은 보안 결함을 은폐하거나 적어도 이 결함들을 발표하지 않는 커널 개발자들을 비난해왔다. 즉, 2008년 리누스 토르발스는 다음과 같이 이에 대해 응답하였다:<ref>{{웹 인용|url=http://kerneltrap.org/Linux/Security_Bugs_and_Full_Disclosure |title=Security Bugs and Full Disclosure |last=Andrews |first=Jeremy |date=16 July 2008 |publisher=[[KernelTrap]] |accessdate=31 December 2010 |archiveurl=https://web.archive.org/web/20080719130436/http://kerneltrap.org/Linux/Security_Bugs_and_Full_Disclosure |archivedate=19 July 2008 |url-status=dead |df= }}</ref><ref>{{메일링 인용|url=http://seclists.org/fulldisclosure/2008/Jul/276 |title=Linux's unofficial security-through-coverup policy |last=Spengler |first=Brad |date=16 July 2008 |mailinglist=Full Disclosure |accessdate=31 December 2010}}</ref>

{{quote|저는 개인적으로 보안 버그를 단지 "일반적인 버그"로 치부합니다. 저는 이 버그들을 은폐하는 것은 아니지만 이것들을 추적하여 특별하다고 발표하는 것이 좋은 생각인지 잘 모르겠습니다.}}

리눅스 배포판들은 일반적으로 리눅스 커널의 취약점을 수정하기 위한 보안 업데이트를 출시한다. 수많은 배포판들은 [[장기간 지원]] 릴리스를 제공하며 오랜 기간 특정 리눅스 커널 버전의 보안 업데이트를 받을 수 있게 하고 있다.

=== 기능 역사 ===
2012년 12월, 토르발스는 [[i386]] 프로세서 지원을 제거함으로써 커널 복잡도를 줄이기로 마음먹었고, 이로써 3.7 커널 시리즈가 오리지널 프로세서를 지원하는 마지막이 된다.<ref>{{웹 인용|url=http://www.zdnet.com/article/good-bye-386-linux-to-drop-support-for-i386-chips-with-next-major-release/ |title=Good-Bye 386: Linux to drop support for i386 chips with next major release |last=Vaughan-Nichols |first=Steven J. |date=13 December 2012 |work=[[ZDNet]] |publisher=[[CBS Interactive]] |accessdate=6 February 2013}}</ref><ref>{{웹 인용|url=https://www.engadget.com/2012/12/15/linux-to-drop-i386-support-in-the-3-8-kernel/ |title=Linux to drop i386 support in the 3.8 kernel, make us upgrade our Doom rig |last=Fingas |first=Jon |date=15 December 2012 |work=[[Engadget]] |publisher=[[AOL]] |accessdate=22 March 2015}}</ref> 동일한 시리즈는 [[ARM 아키텍처|ARM]] 프로세서 지원을 통합하였다.<ref>{{웹 인용|url=http://www.zdnet.com/linux-3-7-arrives-arm-developers-rejoice-7000008638/ |title=Linux 3.7 arrives, ARM developers rejoice |last=Vaughan-Nichols |first=Steven J. |date=11 December 2012 |work=[[ZDNet]] |publisher=[[CBS Interactive]] |accessdate=6 February 2013}}</ref>

버전 3.11은 2013년 9월 2일 출시되었고,<ref name="3.11.0 release">{{메일링 인용|url=http://lkml.iu.edu/hypermail/linux/kernel/1309.0/00650.html |title=Linux 3.11 |last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=2 September 2013 |mailinglist=[[LKML]] |accessdate=3 September 2013}}</ref> 수많은 새 기능들을 추가하고 있는데, 이를테면 {{man|2|open|Linux||inline}}의 임시 파일 취약성을 줄이기 위한 새로운 <code>O_TMPFILE</code>, 실험적인 AMD [[라데온]] 동적 전력 관리, 레이턴시가 적은 네트워크 폴링, [[zswap]](압축된 스왑 캐시)가 있다.<ref>{{웹 인용|title=Linux 3.11 |url=http://kernelnewbies.org/Linux_3.11 |publisher=kernelnewbies.org |date=2 September 2013 |accessdate=21 January 2014}}</ref>

2.6.39부터 3.0, 3.19부터 4.0에 이르는 번호 변경은 의미있는 기술적 차이를 수반하지는 않는다. 메이저 버전 번호는 커다란 마이너 번호를 회피하기 위해 증가시킨 것이다.<ref name="3.0 release" /><ref name="4.0 release">{{메일링 인용|url=https://lkml.org/lkml/2015/4/12/178 |title=Linux 4.0 released |last=Torvalds |first=Linus |authorlink=Linus Torvalds |date=12 April 2015 |mailinglist=[[LKML]] |accessdate=12 April 2015}}</ref>

== 개발 ==
{{Graph:Chart |
  width = 800 |
  height = 400 |
  type = rect |
  xAxisTitle = Kernel Version |
  yAxisTitle = Million Lines of Code |
  x = 0.01,  1.0.0, 1.1.0, 1.2.0, 1.3.0, 2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0, 2.6.0, 3.0,    4.0,   4.10, 4.15 |
  y = 0.008, 0.17,  0.17,  0.29,  0.32,  0.71,  0.73,  1.67,  1.76,  3.15,  3.83,  8.10, 14.64,  19.31, 22.84, 25.36
}}
=== 버전 역사 ===
{{리눅스 커널 연표}}

== CPU 이식성 ==
* 1.0 버전(1994.3.14) [[인텔]][[i386]] 계열<ref>"Kernel 1.0 Source Code Release". Retrieved 7 October 2008.</ref>
* 1.2 버전(1995.3.7) [[알파 프로세서]], [[SPARC|스팍프로세서]], [[MIPS]]<ref>Kernel 1.2 Source Code Release". Retrieved 27 October 2008.</ref>
* 2.0버전(1996.6.9) [[대칭형 다중 처리|SMP]]계열 등<ref>Torvalds, Linus (9 June 1996). "Linux 2.0 really _is_ released..". LKML (Mailing list). Retrieved 8 March 2015.</ref>
* 2.2버전(1999 1.20) M68K([[모토로라 68000|Motorola 68000]])시리즈 , [[PowerPC]]<ref>Torvalds, Linus (20 January 1999). "2.2.0-final". LKML (Mailing list). Retrieved 8 March 2015</ref><ref>"The Wonderful World of Linux 2.2". 26 January 1999. Retrieved 27 October 2008.</ref>
* 2.4 버전(2001.1.4) [[PA-RISC]]<ref>"The Wonderful World of Linux 2.4". Retrieved 27 October 2008.</ref>
* 2.6.x 버전(2003.12.17) 안정적인 [[64bit]] 지원 업데이트<ref>Torvalds, Linus (17 December 2003). "Linux 2.6.0". LKML (Mailing list). Retrieved 28 February 2015.</ref><ref>"proc(5) - Linux manual page" (see /proc/sys/kernel/pid_max).</ref><ref>"Index of /pub/linux/kernel/v2.6". Kernel.org. Retrieved 2 March 2014.</ref>
* 3.0버전(2011.7.22) 안정적인 [[ARM]]의 [[ARM 아키텍처]] 지원<ref>Torvalds, Linus (30 May 2011). "Linux 3.0-rc1". LKML (Mailing list). Retrieved 1 July 2013.</ref><ref>Vaughan-Nichols, Steven J. (13 December 2012). "Good-Bye 386: Linux to drop support for i386 chips with next major release". ZDNet. CBS Interactive. Retrieved 6 February 2013.</ref><ref>Vaughan-Nichols, Steven J. (11 December 2012). "Linux 3.7 arrives, ARM developers rejoice". ZDNet. CBS Interactive. Retrieved 6 February 2013.</ref>
* 3.11버전(2013.9.2) [[AMD]] [[라데온|Radeon]]확장기능 실험적인 지원<ref>Torvalds, Linus (2 September 2013). "Linux 3.11". LKML (Mailing list). Retrieved 3 September 2013.</ref><ref>"Linux 3.11". kernelnewbies.org. 2 September 2013. Retrieved 21 January 2014.</ref>
* 4.0.1버전(2015.4.29)<ref>https://www.kernel.org/pub/linux/kernel/v4.x/</ref> 지속적이고 실험적인 안전성 추구<ref>Torvalds, Linus (12 April 2015). "Linux 4.0 released". LKML (Mailing list). Retrieved 12 April 2015.</ref><ref>Marti, Don. "Are top Linux developers losing the will to code?". ComputerworldUK. Retrieved 2016-10-24.</ref><ref>Kroah-Hartman, Greg (12 February 2008). "Re: Announce: Linux-next (Or Andrew's dream :-))". Linux Kernel Mailing List (Mailing list). Retrieved 30 January 2017.</ref><ref>"Linux kernel 4.1.44 released". LKML (Mailing list). 19 September 2017. Retrieved 20 September 2017.</ref><ref>https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.44</ref>
* 4.11버전(2017.2.26) 가상 [[그래픽 처리 장치|GPU]] 지원<ref>https://linux.slashdot.org/story/17/02/20/0014202/linux-kernel-410-officially-released-with-virtual-gpu-support</ref><ref>https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.10.1</ref><ref>http://www.dbpia.co.kr/Journal/ArticleDetail/NODE01901468</ref>

== 같이 보기 ==
* [[모놀리식 커널]]
* [[커널 (컴퓨팅)]]
* [[임베디드 시스템]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용|Linux kernel}}
* {{공식 웹사이트}}
** [//kernel.org/doc/ 리눅스 커널 문서 색인]
** [//kernel.org/doc/man-pages/ 리눅스 커널 매뉴얼 페이지]
** [https://bugzilla.kernel.org/ 커널 버그질라], [https://bugzilla.kernel.org/show_bug.cgi?id=15790 리그레션] (커널 버전별)
* [http://kernelnewbies.org/ 커널뉴비스]: 다양한 커널 관련 정보의 출처
* [https://web.archive.org/web/20171107130410/http://lingrok.org/ LinGrok]: 리눅스 커널 소스 코드 상호 참조
* {{유튜브|L2SED6sewRw|Greg Kroah Hartman on the Linux kernel}}

{{리눅스 커널}}
{{리눅스}}

{{전거 통제}}

{{기본정렬:리눅스 커널}}
[[분류:리눅스 커널| ]]
[[분류:모놀리식 커널]]
[[분류:자유 시스템 소프트웨어]]
[[분류:1991년 소프트웨어]]
[[분류:C로 작성된 자유 소프트웨어]]
[[분류:핀란드의 발명품]]
[[분류:리누스 토르발스]]
[[분류:유닉스 계열]]