Hạt nhân Linux

Bách khoa toàn thư mở Wikipedia
(Đổi hướng từ Nhân Linux)
Nhân Linux
Tux
Chú chim cánh cụt Tux biểu tượng của Linux[1]
Linux kernel 3.0.0 đang khởi động
Nhà phát triểnLinus Torvalds và hàng ngàn cộng tác viên
Được viết bằngCassembly[2]
Họ hệ điều hànhTương tự Unix
Phát hành
lần đầu
0.01 (17 tháng 9 năm 1991; 32 năm trước (1991-09-17))
Có hiệu lực
trong
Đa ngôn ngữ
Loại nhânMonolithic
Giấy phépGNU General Public License, v2[3][4] cộng với nhiều tùy chọn tự do phân phối các gói nhị phân[5][6]

Nhân Linux hay Linux kernel là một hạt nhân monolithic cho các hệ điều hành tương tự Unix. Họ hệ điều hành Linux dựa trên hạt nhân này và được triển khai trên cả hai hệ thống máy tính truyền thống là máy tính cá nhânmáy chủ, thường dưới dạng bản phân phối Linux,[7] và trên các thiết bị nhúng khác nhau như router, điểm truy cập không dây, PBX, set-top box, máy thu FTA, smart TV, PVR và thiết bị NAS. Hệ điều hành Android cho máy tính bảng, điện thoại thông minhđồng hồ thông minh sử dụng các dịch vụ do hạt nhân Linux cung cấp để thực hiện chức năng của nó. Trong khi thị phần trên desktop thấp, các hệ điều hành dựa trên Linux chiếm ưu thế gần như mọi phân đoạn máy tính khác, từ thiết bị di động đến máy tính lớn. Tính đến tháng 11/ 2017, tất cả 500 siêu máy tính mạnh nhất thế giới đều chạy Linux.[8]

Nhân Linux được viết bởi Linus Torvalds vào năm 1991 cho máy tính cá nhân của mình[9] và không có ý định đa nền tảng, nhưng sau đó nó đã mở rộng hỗ trợ số lượng nền tảng kiến trúc máy tính khổng lồ. Linux nhanh chóng thu hút các nhà phát triển và người dùng sử dụng nó làm hạt nhân cho các dự án phần mềm tự do khác, đáng chú ý là Hệ điều hành GNU[10] được tạo ra như một hệ điều hành tự do, không độc quyền và dựa trên UNIX như một sản phẩm phụ của sự sụp đổ của các cuộc chiến Unix.[11] Nhân Linux đã nhận được sự đóng góp của gần 12.000 lập trình viên từ hơn 1.200 công ty, bao gồm một số nhà cung cấp phần mềm và phần cứng lớn nhất.[12]

Linux kernel API, một API thông qua đó các chương trình người dùng tương tác với hạt nhân, nó có ý nghĩa làm ổn định và không phá vỡ các chương trình không gian người dùng (một số chương trình có giao diện đồ họa người dùng GUI, số khác cũng dựa vào các API khác). Là một phần của chức năng của kernel, trình điều khiển thiết bị điều khiển phần cứng; Trình điều khiển "mainlined" (bên trong kernel) cũng có nghĩa là rất ổn định. Tuy nhiên, giao diện giữa các mô-đun hạt nhân và hạt nhân có thể tải (LKMs), không giống như trong nhiều hạt nhân và hệ điều hành khác, không có nghĩa là rất ổn định theo thiết kế.[13]

Hạt nhân Linux được phát triển bởi những người đóng góp trên toàn thế giới, là một ví dụ nổi bật về phần mềm tự do nguồn mở,[14] và nó được hỗ trợ lên đến sáu năm tùy theo phiên bản. Các cuộc thảo luận phát triển hàng ngày diễn ra trên Linux kernel mailing list (LKML). Hạt nhân Linux được phát hành theo Giấy phép Công cộng GNU phiên bản 2 (GPLv2)[15][16] với một số firmware được phát hành theo nhiều giấy phép không miễn phí.[15]

Lịch sử[sửa | sửa mã nguồn]

Xem thêm: Lịch sử Linux

Tháng 4/1991, Linus Torvalds, tại thời điểm đó là một sinh viên khoa học máy tính 21 tuổi tại Đại học Helsinki, Phần Lan, bắt đầu nghiên cứu một số ý tưởng đơn giản cho một hệ điều hành. Ông bắt đầu với một tác vụ switcher trong assembly Intel 80386 và một trình điều khiển thiết bị đầu cuối. Ngày 25/8/1991, Torvalds đã đăng thông tin sau lên Usenet comp.os.minix,[17] trong đó có đoạn viết:

Tôi đang làm một hệ điều hành (miễn phí) (chỉ là một sở thích, sẽ không lớn và chuyên nghiệp như gnu) cho một bản sao của chip AT 386 (486). Việc này đã bắt đầu từ tháng 4 và đang bắt đầu sẵn sàng. Tôi muốn bất kỳ thông tin phản hồi về việc mọi người thích, hoặc không thích trong Minix như hệ điều hành của tôi tương tự nó (giống về cấu trúc vật lý của file system (vì nhiều lý do về áp dụng trong thực tế) và nhiều thứ khác. Hiện tôi đang port bash(1.08) và GCC(1.40) và mọi thứ dường như đang hoạt động ổn. Điều này ngụ ý rằng tôi sẽ tạo ra được thứ gì đó có thể chạy được trong vòng một vài tháng tới [...] P/s: Vâng - bất kì mã Minix đều miễn phí hết, và nó có một hệ thống fs đa luồng. Nó không protable [sic] (sử dụng chuyển đổi tác vụ 386 vân vân), và nó có lẽ sẽ không bao giờ hỗ trợ bất cứ hệ thống nào ngoài ổ cứng AT, vì đó là tất cả những gì tôi hiện có:-(.

[...] nó chủ yếu viết bằng C, nhưng hầu hết mọi người sẽ không nói rằng những gì tôi viết (là C). Nó sử dụng tất cả các tính năng có thể có của 386 mà tôi có thể tìm thấy vì nó cũng là một dự án để dạy tôi về 386. Như đã đề cập, nó sử dụng MMU cho cả phân trang (chưa có khả năng ghi được vào đĩa) và phân đoạn. Khả năng phân đoạn làm cho nó thực sự phụ thuộc vào 386 (mỗi tác vụ có một phân đoạn 64Mb cho mã và dữ liệu - tối đa 64 tác vụ trong 4Gb. Ai sẽ cần hơn 64Mb/tác vụ cơ chứ - chỉ có thể là một tác vụ khó nhằn).

Sau đó, nhiều người đã đóng góp mã cho dự án. Ban đầu, cộng đồng MINIX đã đóng góp mã và ý tưởng cho nhân Linux. Vào thời điểm đó, Dự án GNU đã tạo ra nhiều thành phần cần thiết cho một hệ điều hành tự do, nhưng hạt nhân riêng của nó, GNU Hurd, không đầy đủ và không có sẵn. Hệ điều hành BSD vẫn chưa tự giải thoát khỏi các vụ kiện pháp lý. Mặc dù có các chức năng giới hạn của các phiên bản đầu, Linux nhanh chóng thu hút các nhà phát triển và người dùng.

Vào thời điểm này, dự án GNU đã hoàn thành nhiều cấu thành thiết yếu cho một hệ điều hành tự do, tuy nhiên phần hạt nhân (lõi - Linux Kernel) GNU Hurd của hệ điều hành này vẫn chưa được hoàn thành. Ngoài ra hệ điều hành BSD vẫn chưa được tự do hóa do các trở ngại về mặt pháp lý. Những điều này đã tạo ra một chỗ đứng thuận lợi cho hạt nhân Linux, nó nhanh chóng giành được sự quan tâm của các nhà phát triển cũng như người dùng.

Tháng 9/1991, hạt nhân Linux phiên bản 0.01 được phát hành trên máy chủ FTP (ftp.funet.fi) của Đại học Phần Lan và Mạng Nghiên cứu (FUNET). Nó có 10,239 dòng mã. Ngày 10/5/1991, phiên bản 0.02 của hạt nhân Linux đã được phát hành.[18]

Nhân Linux được tìm thấy phổ biến trên nhiều phần cứng khác nhau và được hỗ trợ bởi sự phong phú của cả phần mềm tự do nguồn mở và phần mềm sở hữu độc quyền

Tháng 12/1991, hạt nhân Linux 0.11 đã được phát hành. Phiên bản này là phiên bản đầu tiên được tự lưu trữ vì hạt nhân Linux 0.11 có thể được biên dịch bởi một máy tính chạy cùng phiên bản hạt nhân. Khi Torvald phát hành phiên bản 0.12 vào tháng 2/1992, ông đã thông qua Giấy phép Công cộng GNU (GPL) so với giấy phép tự soạn thảo trước đó của mình, điều này đã không cho phép phân phối lại thương mại.[19]

Ngày 19/1/1992, bài đăng đầu tiên tới nhóm tin tức mới alt.os.linux đã được đăng tải.[20] Ngày 31/3/1992, nhóm tin được đổi tên thành comp.os.linux.[20][21] Việc Linux là một hạt nhân nguyên khối chứ không phải là một microkernel là chủ đề của cuộc tranh luận giữa Andrew S. Tanenbaum, người đã tạo ra MINIX, và Torvalds.[22] Cuộc thảo luận này được gọi là cuộc tranh luận Tanenbaum–Torvalds và bắt đầu vào năm 1992 trên nhóm thảo luận Usenet comp.os.minix như một cuộc tranh luận chung về Linux và kiến trúc hạt nhân.[23] Tanenbaum lập luận rằng microkernel vượt trội hơn so với hạt nhân nguyên khối và do đó Linux đã lỗi thời. Không giống như các hạt nhân nguyên khối truyền thống, trình điều khiển thiết bị trong Linux có thể dễ dàng được cấu hình dưới dạng các mô-đun hạt nhân có thể tải và được tải hoặc không tải trong khi chạy hệ thống. Chủ đề này đã được xem lại vào ngày 9 tháng 5 năm 2006,[24] và vào ngày 12 tháng 5 năm 2006 Tanenbaum đã viết một tuyên bố về quan điểm.[25]

Tháng 3 năm 1992, phiên bản 0.xx cuối cùng của Linux kernel được phát hành. Linux version 0.95 là phiên bản đầu tiên có khả năng chạy X, vì Hệ thống X Window đã được port sang Linux. Bước nhảy lớn này được thể hiện trong số hiệu phiên bản, từ 0.1x đến 0.9x, do kỳ vọng phiên bản 1.0, mà không có những phần thiếu sót lớn, sắp xảy ra. Tuy nhiên, điều này đã được chứng minh là sai và từ năm 1993 đến đầu năm 1994, 15 phiên bản phát triển của phiên bản 0.99 đã ra mắt. Ngày 14 tháng 3 năm 1994, phiên bản chính thức đầu tiên của Linux kernel được phát hành.[26] Linux kernel 1.0.0 có 176,250 dòng lệnh. Linux kernel 1.0.0 đã khởi động một hệ thống đánh số phiên bản v.x.y tiêu chuẩn cho kernel,trong đó x đại diện cho một phiên bản chính. Các bản phát hành số lẻ là để thử nghiệm và phát triển. Vào thời điểm đó, chỉ có các phiên bản được đánh số chẵn là phát hành sản xuất. Chữ y được tăng lên khi các bản vá nhỏ được phát hành trong phiên bản chính.[26] Vào tháng 3 năm 1995, Linux kernel 1.2.0 đã được phát hành, với 310.950 dòng mã.

Sau phiên bản kernel v1.3, Torvalds đã quyết định rằng đã có đủ các thay đổi đối với nhân Linux để đảm bảo việc phát hành phiên bản mới. Phiên bản 2.0.0 của Linux kernel được phát hành ngày 9 tháng 6 năm 1996.[27] Trái ngược với Unix, tất cả mã nguồn của Linux kernel có sẵn miễn phí, bao gồm trình điều khiển, thư viện runtime và các công cụ phát triển.[28] Thành công ban đầu của nhân Linux được thúc đẩy bởi sự hỗ trợ của các lập trình viên và người thử nghiệm trên toàn thế giới. Bằng cách cấu trúc nhân Linux theo các tiêu chuẩn POSIX, nó tương thích với một loạt các phần mềm và ứng dụng miễn phí đã được phát triển cho các trường đại học.

Các nhà phát triển đóng góp cho nhân Linux đã nghĩ rằng điều quan trọng là hạt nhân mà Torvald đã viết cho các PC của Intel hỗ trợ các kiến ​​trúc phần cứng khác nhau. Hiện nay hạt nhân Linux có thể chạy trên các CPU từ Intel (80386, 80486, 80686), Digital Equipment Corporation (Alpha), Motorola (MC680x0 and PowerPC), Silicon Graphics (MIPS) và Sun Microsystems (SPARC). Thông qua một trình giả lập FPU tích hợp, nhân Linux thậm chí có thể chạy trên các kiến ​​trúc phần cứng thiếu bộ đồng xử lý toán học dấu phẩy động.[29] Các nhóm nhà phát triển được thành lập cho các kiến ​​trúc khác nhau và với việc phát hành Linux kernel phiên bản 2.0, các nguồn của kernel bao gồm tất cả các thành phần để cấu hình kernel cho các kiến ​​trúc khác nhau trước khi biên dịch nó.[30] Làm cho nhân Linux tương thích với các hệ thống file khác nhau cũng được ưu tiên. Nhân Linux có thể vận hành các hệ thống tập tin đã được định dạng cho Minix, Xenix hoặc System V, trong khi định dạng umsdos thậm chí cho phép Linux được cài đặt trong phân vùng MS-DOS.[29] Vào tháng 12 năm 1999, các bản vá máy tính lớn của IBM cho 2.2.13 đã được xuất bản, cho phép nhân Linux được sử dụng trên các máy cấp doanh nghiệp.

Tháng 12 năm 2003, với việc phát hành phiên bản kernel 2.6.0, 2.6.0, đã coi các hạt nhân Linux ổn định đến mức ông bắt đầu chu trình phát hành 2.6.x.y. Mỗi bản phát hành 2.6 là một hạt nhân để sản xuất, các bản phát hành phát triển được chỉ định bằng -rc ("release candidate") được gắn vào số hiệu phiên bản. Các bản phát hành kernel ổn định 2.6 bắt đầu được phát hành theo lịch trình đều đặn cứ sau 2 tháng 3, cho đến 2.6.39 tháng 5 năm 2011.[27] Chu kỳ phát hành ngắn hơn là kết quả của các cuộc thảo luận giữa các nhà phát triển kernel về sơ đồ phát hành và phiên bản năm 2004.[31][32]

Để đáp lại việc thiếu một nhánh ổn định, nơi mọi người có thể điều phối bộ sưu tập sửa lỗi như vậy, vào tháng 12 năm 2005 Adrian Bunk tuyên bố rằng anh ta sẽ tiếp tục phát hành hạt nhân 2.6.16.y khi nhóm ổn định chuyển sang 2.6.17.[33][34] Ông cũng bao gồm một số cập nhật trình điều khiển, làm cho việc bảo trì loạt 2.6.16 rất giống với các quy tắc cũ để bảo trì một loạt ổn định như 2.4.[35] Kể từ đó, "nhóm ổn định" đã được thành lập và nó sẽ tiếp tục cập nhật các phiên bản kernel với các sửa lỗi. Vào tháng 10 năm 2008, Adrian Bunk tuyên bố rằng ông sẽ duy trì 2.6.27 trong một vài năm để thay thế 2.6.16.[36] Đội ngũ ổn định đã lên ý tưởng và tính toán năm 2010, họ tiếp tục duy trì phiên bản đó và phát hành các bản sửa lỗi cho nó, ngoài ra còn có các bản sửa lỗi khác.[37] Andrew Morton quyết định tái sử dụng cây-mm của mình từ quản lý bộ nhớ để làm đích cho tất cả các mã mới và thử nghiệm. Vào tháng 9 năm 2007, Morton quyết định ngừng duy trì cây này.[38] Vào tháng 2 năm 2008, Stephen Rothwell đã tạo ra cây linux-next để phục vụ như là một nơi mà các bản vá nhằm mục đích được hợp nhất trong chu kỳ phát triển tiếp theo được tập hợp lại.[39][40] Một số nhà bảo trì hệ thống con cũng sử dụng hậu tố -next cho các cây có chứa mã được gửi để đưa vào chu kỳ phát hành tiếp theo. Tính đến tháng 1 năm 2014, phiên bản đang phát triển của nhân Linux được giữ trong một nhánh không ổn định có tên linux-next.[41]

Mã nguồn nhân Linux được bảo trì mà không cần sự trợ giúp của hệ thống quản lý mã nguồn tự động (SCM), chủ yếu là do Torvalds không thích các hệ thống SCM tập trung. Năm 2002, phát triển nhân Linux đã chuyển sang BitKeeper, một hệ thống SCM đáp ứng các yêu cầu kỹ thuật của Torvalds. BitKeeper đã được cung cấp miễn phí cho Torvalds và một số người khác miễn phí nhưng không phải là phần mềm tự do, đây là một nguồn gây tranh cãi. Hệ thống này đã cung cấp một số khả năng tương tác với các hệ thống SCM miễn phí như CVSSubversion. Tháng 4 năm 2005, Vào tháng 4 năm 2005, những nỗ lực dò ngược hệ thống BitKeeper của Andrew Tridgell đã khiến BitMover, công ty duy trì BitKeeper, ngừng hỗ trợ cộng đồng phát triển Linux. Đáp lại, Torvalds và những người khác đã viết một hệ thống kiểm soát mã nguồn mới cho mục đích này, được gọi là Git. Hệ thống mới được viết trong vòng vài tuần và trong hai tháng, bản phát hành hạt nhân chính thức đầu tiên được thực hiện bằng Git.[42]

Năm 2008, Greg Kroah-Hartman nói rằng từ năm 2005 hơn 3.700 nhà phát triển các nhân từ hơn 200 công ty khác nhau đã có đóng góp vào kernel.[43] Kỷ niệm 20 năm nhân Linux được Torvalds tổ chức vào tháng 7 năm 2011 với việc phát hành phiên bản kernel 3.0.0.[27][44][45] Mặc dù nó không có thay đổi công nghệ lớn khi so sánh với Linux 2.6.39[46] Linux Foundation đã kỷ niệm 20 năm hạt nhân trong phiên bản 2011 của nghiên cứu phát triển hạt nhân của họ. Kernel 3.0 có 15 triệu dòng lệnh và hơn 1.300 nhà phát triển các nhân có đóng góp cho phiên bản này của nhân Linux. Các nhà phát triển tình nguyện đóng góp 16% tất cả thay đổi của nhân Linux vào năm 2011. Những thay đổi khác đến từ những nhà phát triển phần mềm chuyên nghiệp, những người được các công ty thuê để gửi mã cho kernel. Năm 2011, các nhà phát triển Red Hat đã đóng góp 10% các thay đổi được thực hiện cho kernel, doanh nghiệp đóng góp lớn thứ hai là Intel, tiếp theo là IBMNovell. Mặc dù lúc đó Nokia đã từ bỏ hệ điều hành cho điện thoại thông minh dựa trên nhân Linux của mình là MeeGo, nhưng năm 2011, các nhà phát triển Nokia vẫn đóng góp nhiều mã cho nhân Linux hơn so với các nhà phát triển được Google thuê, đã phát hành Android vào năm 2007 và Chrome OS vào năm 2009. Đến năm 2011, Microsoft dao động như là doanh nghiệp đóng góp nhiều thứ 17 cho hạt nhân. Các nhà phát triển của nó đã lần đầu tiên bắt đầu đóng góp cho kernel vào năm 2009 để cải thiện hiệu năng của các máy ảo Linux chạy trên trình ảo hóa Windows Hyper-V.[47]

Các hạt nhân ổn định 3.x.y đã được phát hành cho đến 3.19 trong tháng 2 năm 2015, với các phiên bản phát triển mang ký hiệu -rc. Để giải thích cho bản phát hành bản vá đặc biệt thường xuyên, series v3 của kernel đã thêm một chữ số thứ tư vào đánh số phiên bản. tháng 4 năm 2015, Torvalds đã phát hành phiên bản kernel 4.0.[27] Vào tháng 2 năm 2015, nhân Linux đã nhận được sự đóng góp của gần 12.000 lập trình viên từ hơn 1.200 công ty, bao gồm một số nhà cung cấp phần mềm và phần cứng lớn nhất thế giới.[48] Phiên bản 4.1 của nhân Linux, được phát hành vào tháng 6 năm 2015, chứa hơn 19,5 triệu dòng mã được đóng góp bởi gần 14.000 lập trình viên.[49]

Phổ biến[sửa | sửa mã nguồn]

Các bản phân phối Linux đóng gói nhân Linux với các ứng dụng, chương trình và gói ứng dụng Unix chịu trách nhiệm cho sự phổ biến ngày càng tăng của hệ điều hành Linux với người dùng.[30] Sự phổ biến của hệ điều hành Android, bao gồm nhân Linux, đã khiến hạt nhân này trở thành lựa chọn phổ biến nhất cho các thiết bị di động, cạnh tranh với cơ sở được cài đặt của tất cả các hệ điều hành khác.[50][51][52]

Nhiều bộ định tuyến cũng sử dụng nhân Linux,[53] cũng như nhiều loại thiết bị nhúng khác, chẳng hạn như smart TVs, set-top boxes, và webcams. Nhiều bản phân phối Linux trên máy tính để bàn bao gồm cả nhân Linux tồn tại, nhưng tỷ lệ sử dụng của các bản phân phối Linux thấp so với các hệ điều hành khác.

Tính đến tháng 11/ 2017, tất cả 500 siêu máy tính mạnh nhất thế giới đều chạy Linux.[8]

Kiến trúc[sửa | sửa mã nguồn]

Bản đồ của Linux kernel

Nhân Linux là một thiết kế nguyên khối và mô đun hóa (có thể nạp vào hay gỡ bỏ các kernel mô đun trong lúc đang chạy),[54][55] hỗ trợ hầu hết các tính năng chỉ có trên nhân mã nguồn đóng của các hệ điều hành không tự do. Từ giờ trở đi, bài viết này sử dụng các thuật ngữ của các hệ điều hành Unix và tương tự, được đề cập trong các Man page (cẩm nang) chính thức. Các số đằng sau câu lệnh, giao diện hay các tính năng khác chỉ định nó thuộc thành phần nào của nhân (ví dụ execve(2) là một lời gọi hệ thống, còn exec(3) là một wrapper trong userspace). Danh sách sau đây và các phần tiếp theo mô tả tổng quan không đầy đủ về thiết kế kiến ​​trúc Linux và một số tính năng đáng chú ý của nó.

  • Tính toán tương tranh và thậm chí thực thi các tiến trình song song trên các hệ thống SMP và NUMA (nếu có đủ số nhân CPU cho các tác vụ đã sẵn sàng)
  • Cho phép lựa chọn và cấu hình hàng trăm tính năng và trình điều khiển trong nhân (bằng cách sử dụng một trong các lệnh make *config trước khi biên dịch kernel),[56][57][58] thay đổi các tham số trong kernel trước khi khởi động (thông qua GRUB menu) và tinh chỉnh cách vận hành của kernel trong lúc chạy (sử dụng giao diện sysctl(8) tới /proc/sys/).[59][60][61]
  • Cho phép cấu hình và thay đối các chính sách của trình lập lịch tác vụ,[62] thông qua nice(2), setpriority(2), và các lời gọi hệ thống sched_*(2), cho phép đa nhiệm ưu tiên (trong chế độ người dùng và trong kernel từ phiên bản 2.6 trở đi)[63][64]; Completely Fair Scheduler (CFS) là trình lập lịch mặc định kể từ 2007, sử dụng một cây đỏ-đen để tìm kiếm, thêm vào và xóa thông tin tiến trình với độ phức tạp của thời gian chạy thuật toánO(log n), với n là số tác vụ có thể chạy.[65][66]
  • Quản lý bộ nhớ nâng cao với bộ nhớ ảo phân trang.
  • Giao tiếp liên tiến trìnhđồng bộ hóa.
  • Một hệ thống file ảo trên vài hệ thống file thực (ext4, Btrfs, XFS, JFS, FAT32 v.v.).
  • Trình lập lịch I/O cấu hình được, lời gọi hệ thống ioctl(2)[67] để thay đổi tham số của thiết bị trong các file đặc biệt (tuy nhiên nó không phải lời gọi chuẩn bởi có nhiều thiết bị khác nhau), I/O không đồng bộ của POSIX[68] (tuy nhiên do khả năng mở rộng quy mô kém trong đa luồng, người ta phải tạo ra các lời gọi hệ thống của riêng Linux (io_*(2)[69]) ).
  • Ảo hóa cấp độ hệ điều hành với Linux-VServer, paravirtualization và ảo hóa với trợ giúp phần cứng (với KVM hoặc Xen, và sử dụng QEMU để giả lập phần cứng);[70][71][72][73][74][75] Trên hypervisor Xen, Linux kernel hỗ trợ biên dịch các bản phân phối Linux (như OpenSuSE Leap v.v) gọi là Dom0, các server máy ảo chủ cung cấp môi trường quản lý cho các máy ảo khách của người dùng (DomU).[76]
  • Ảo hóa I/O với VFIO và SR-IOV. Virtual function I/O (VFIO) cung cấp truy cập trực tiếp vào thiết bị từ userspace trong một môi trường bảo vệ bộ nhớ nghiêm ngặt (IOMMU). Với VFIO, một máy ảo khách có thể truy cập trực tiếp vào phần cứng trên server máy ảo chủ. Kỹ thuật này cải thiện hiệu năng so với Ảo hóa toàn phần và Paravirtualization. Tuy nhiên với VFIO các thiết bị không thể được chia sẻ giữa các máy ảo khách. Single Root I/O Virtualization (SR-IOV) kết hợp hiệu năng của VFIO với khả năng chia sẻ thiết bị giữa các máy ảo khách (nhưng nó đòi hỏi phần cứng phải có khả năng hiển thị trong các máy ảo dưới dạng các thiết bị khác nhau).[77]
  • Các cơ chế bảo mật để kiểm soát truy cập tùy quyềnbắt buộc (SELinux, AppArmor, POSIX ACLs, v.v.).[78][79]
  • Một số loại giao thức truyền thông phân tầng (bao gồm cả Internet protocol suite)
  • Đa xử lý không đối xứng, thông qua hệ thống RPMsg.

Trình điều khiển thiết bị và phần mở rộng kernel chạy trong không gian kernel (ring 0 trong nhiều kiến trúc CPU), với toàn quyền truy cập vào phần cứng, mặc dù một số ngoại lệ chạy trong không gian người dùng, ví dụ: hệ thống file dựa trên FUSE/CUSE, và các phần của UIO.[80][81] Hơn nữa, X Window và Wayland, các hệ thống cửa sổ và các giao thức máy chủ hiển thị mà hầu hết mọi người sử dụng với Linux không chạy trong kernel.

Không giống như các hạt nhân nguyên khối tiêu chuẩn, trình điều khiển thiết bị dễ dàng được cấu hình dưới dạng các mô-đun và được tải hoặc không tải trong khi hệ thống đang chạy. Ngoài ra driver có thể bị ngắt quãng trong một số điều kiện nhất định; tính năng này đã được thêm vào để xử lý các ngắt phần cứng một cách chính xác và để hỗ trợ tốt hơn cho đa xử lý đối xứng.[82] Theo lựa chọn, nhân Linux không có giao diện nhị phân ứng dụng ổn định cho các driver.[83]

Phần cứng cũng được thể hiện trong hệ thống phân cấp file. Giao diện trình điều khiển thiết bị với các ứng dụng người dùng thông qua một mục trong thư mục /dev hoặc /sys.[84] Thông tin tiến trình cũng được ánh xạ tới hệ thống file thông qua thư mục /proc.[84]

Các lớp khác nhau trong Linux, cũng như sự tách biệt giữa userlandkernel space
User mode Ứng dụng người dùng Ví dụ, bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, v.v.
Các thành phần hệ thống Các daemons hệ thống:
systemd, runit, logind, networkd, PulseAudio, ...
Hệ thống cửa sổ:
X11, Wayland, SurfaceFlinger (Android)
Đồ hoạ:
Mesa, AMD Catalyst, ...
Thư viện khác:
GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep, v.v.
Thư viện chuẩn C open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (lên đến 2000 chương trình con)
glibc nhắm tới tốc độ, musluClibc nhắm đến hệ thống nhúng, bionic được viết cho Android, v.v. Tất cả đều hướng đến việc tương thích với POSIX/SUS.
Kernel mode Nhân Linux stat, splice, dup, read, open, ioctl, write, mmap, close, exit, v.v. (có khoảng 380 lời gọi hệ thống)
Nhân Linux System Call Interface (SCI, nhắm đến việc tương thích với POSIX/SUS)
Hệ thống con
Lập lịch cho các tiến trình
Hệ thống con
Giao tiếp giữa các tiến trình
Hệ thống con
Quản lý bộ nhớ
Hệ thống con
Hệ thống file ảo
Hệ thống con
Mạng
Các thành phần khác: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter
Các môdun bảo mật: SELinux, TOMOYO, AppArmor, Smack
Phần cứng (CPU, bộ nhớ chính, thiết bị lưu trữ dữ liệu, v.v)

Giao diện[sửa | sửa mã nguồn]

Bốn giao diện được phân biệt: hai bên trong kernel và hai ở giữa kernel và không gian người dùng.

Linux là một hệ điều hành giống UNIX, và nhắm tới việc tương thích với POSIXSingle UNIX Specification.[85] Ngoài ra nó còn cung cấp các lời gọi hệ thống và giao diện khác của riêng mình. Một đoạn mã muốn được thêm vào kernel chính thức phải tuân theo một số quy tắc về việc cấp phép.[86][87]

Giao diện nhị phân ứng dụng (ABI) của Linux nằm giữa kernel và không gian người dùng (user space) có bốn mức độ ổn định (ổn định, testing, lỗi thời và bị xóa bỏ),[88] tuy nhiên các lời gọi hệ thống không bao giờ được phép thay đổi vì điều đó có thể làm hỏng các chương trình user space sử dụng chúng.[89]

Các Loadable kernel module (LKM) được thiết kế không thể phụ thuộc vào một ABI ổn định.[90] Do đo chúng phải luôn được biên dịch lại mỗi khi có một kernel mới được cài đặt vào hệ thống, nếu không sẽ không tải được chúng. Các driver đã có sẵn như là một phần trọng yếu trong tập tin thực thi của kernel (gọi là vmlinux) được liên kết tĩnh trong quá trình biên dịch.

Ngoài ra không có sự đảm bảo nào về tính ổn định của các API trong kernel,[91] vì vậy mã nguồn của driver cũng như các hệ thống trong kernel phải được cập nhật thường xuyên. Bất kỳ lập trình viên nào thay đổi một API cũng được yêu cầu phải sửa tất cả các code bị ảnh hưởng.[92]

API giữa kernel và người dùng[sửa | sửa mã nguồn]

Tập hợp API của kernel liên quan đến giao diện viết cho ứng dụng người dùng, về cơ bản, bao gồm các lời gọi hệ thống của UNIX và các lời gọi của riêng Linux.[93] Một lời gọi hệ thống là một điểm vào bên trong kernel.[94] Ví dụ, trong các lời gọi riêng của Linux có một họ các lời gọi là system(2).[95] Hầu hết các mở rộng phải được bật thông qua macro _GNU_SOURCE trong một header file hoặc trong lúc biên dịch chương trình ứng dụng.[96]

Lời gọi hệ thống chỉ được thực hiện bằng cách sử dụng các lệnh bằng hợp ngữ cho phép chuyển từ chế độ người dùng không đặc quyền lên chế độ kernel đặc quyền trong ring 0. Vì vậy, thư viện C chuẩn (libC) có tác dụng như một wrapper của các lời gọi hệ thống, trong đó các hàm C chỉ khi cần thiết[97] mới vào bên trong kernel để thực hiện lời gọi thay cho chương trình gọi nó.[98] Đối với các lời gọi không có trong libC, ví dụ như fast user mutex (futex),[99] thư viện cung cấp hàm syscall(2) cho phép thực hiện thẳng lời gọi đó.[100]

Các hệ thống file giả (ví dụ như sysfs hay procfs) và các file đặc biệt như /dev/random, /dev/sda/ hay /dev/tty, v.v là một cách trừu tượng hóa các thiểt bị phần cứng vật lý hoặc thiết bị phần mềm.[101][102]

ABI giữa kernel và người dùng[sửa | sửa mã nguồn]

Có sự khác biệt giữa hàng trăm hệ điều hành Linux khác nhau, do đó các tập thực thi nhị phân được biên dịch, hợp dịch (assembly) hay liên kết để chạy trên một kiến trúc máy tính (ISA) cụ thể thường không thể chạy được trên các bản phân phối Linux khác nhau. Lý do chủ yếu là cấu hình riêng của bản phân phối hay các bản vá của kernel, hoặc khác biệt trong thư viện của hệ thống, dịch vụ (daemon), hệ thống file hay biến môi trường.

Tiêu chuẩn chính liên quan đến vấn đề tương thích của các tập tin nhị phân và ứng dụng trong các bản phân phối là Linux Standard Base (LSB).[103][104] Tuy nhiên LSB không chỉ đề cập đến kernel mà cả các môi trường desktop như thư viện X và Qt, những thứ không liên quan lắm đến kernel.[105] LSB phiên bản 5 dựa trên vài tiêu chuẩn và bản dự thảo như POSIX, SUS, X/Open, File System Hierarchy (FHS), v.v.[106]

Các thành phần phần lớn liên quan đến kernel của LSB gọi là General ABI (gABI),[107] đặc biệt là System V ABI[108][109]Executable and Linking Format (ELF)[110][111]Processor Specific ABI (psABI), ví dụ như Core Specification for X86-64.[112][113]

Tiêu chuẩn ABI để các chương trình x86_64 thực hiện lời gọi hệ thống là nạp mã số lời gọi vào thanh ghi rax và các tham số vào các thanh ghi rdi, rsi, rdx, r10, r8r9, sau đó thực thi lệnh (hợp ngữ) syscall.[114][115][116]

API nội bộ kernel[sửa | sửa mã nguồn]

Tại XDC2014, Alex Deucher đến từ AMD công bố một driver hợp nhất trong kernel.[117] Thư viện đồ họa độc quyền libGL-fglrx-glx sẽ sử dụng DRM cùng với Mesa 3D. Vì không có ABI nội bộ ổn định, AMD phải liên tục chuyển đổi từ binary blob cũ được sử dụng bởi Catalyst.

Có vài API nội bộ được sử dụng giữa các hệ thống trong kernel. Một số chỉ truy cập được bên trong hệ thống con, ngoài ra có một tập hợp khá ít ỏi các symbol (bao gồm các biến, hàm và cấu trúc) được xuất ra cho các module có thể tải động (ví dụ, các driver được tải khi yêu cầu) bằng cách thêm vào các macro EXPORT_SYMBOL() hoặc EXPORT_SYMBOL_GPL() (được dùng riêng cho các module có giấy phép GPL).[118][119][120]

Linux còn cung cấp các API nội bộ cho phép tương tác với các cấu trúc dữ liệu (như danh sách liên kết, cây radix,[121] cây đỏ-đen[122]hàng đợi) hay thực hiện các hành động thông thường như sao chép dữ liệu trong user space, cấp phát bộ nhớ, in ra lịch trình hệ thống, v.v. được ổn định kể từ phiên bản 2.6.[123][124][125]

Các API nội bộ bao gồm các thư viện cung cấp các dịch vụ cấp thấp cho các trình điều khiển thiết bị phải kể đến:

  • Giao diện SCSI: một giao thức peer-to-peer cho các thiết bị lưu trữ sử dụng USB, SATA, SAS, Fibre Channel, FireWire, ATAPI[126] và libATA: thư viện hỗ trợ các thiết bị và máy chủ sử dụng SATA.[127]
  • Direct Rendering Manager (DRM) và Kernel Mode Setting (KMS): giao diện tới GPU và hỗ trợ nhu cầu sử dụng phần cứng 3D hiện đại,[128] và để chọn độ phân giải, màu và tốc độ refresh hiển thị.[129]
  • Bộ đệm DMA (DMA-BUF): để chia sẻ bộ đệm DMA giữa các driver và các hệ thống khác.[130][131][132]
  • Video4Linux dành cho việc thu lại video.
  • Advanced Linux Sound Architecture (ALSA) dành cho card âm thanh.
  • New API cho NIC.
  • mac80211 và cfg80211 cho các NIC không giây.[133][134]

ABI nội bộ kernel[sửa | sửa mã nguồn]

Các nhà phát triển Linux chọn cách không bảo trì các ABI ổn định bên trong kernel.[135] Các module được biên dịch cho một phiên bản nhất định không thể nạp được vào phiên bản khác nếu không được biên dịch lại , cho dù mã nguồn của API nội bộ kernel không thay đổi. Nếu chúng bị thay đổi thì mã nguồn module phải được viết lại.[136]

Phát triển[sửa | sửa mã nguồn]

Cộng đồng nhà phát triển[sửa | sửa mã nguồn]

Tính đến năm 2007, sự phát triển của hạt nhân đã chuyển từ top 20 nhà phát triển tích cực nhất, viết 80% mã thành top 30 viết 30% mã, với các nhà phát triển hàng đầu dành nhiều thời gian xem xét thay đổi hơn.[137] Các nhà phát triển cũng có thể được phân loại theo liên kết; trong năm 2007, các nhóm hàng đầu là không rõ trong khi đứng đầu nhóm doanh nghiệp là Red Hat với 12% đóng góp, và những người nghiệp dư được biết ở mức 3.9%.[137] Những thay đổi về hạt nhân được thực hiện trong năm 2007 đã được gửi bởi hơn 1900 nhà phát triển, có thể là một đánh giá thấp đáng kể bởi vì các nhà phát triển làm việc theo nhóm thường được tính là một.[cần dẫn nguồn] Nó thường được giả định rằng cộng đồng các nhà phát triển hạt nhân Linux bao gồm 5000 hoặc 6000 thành viên.

Cập nhật từ 2016 Linux Kernel Development Report, do Linux Foundation phát hành,bao gồm giai đoạn từ 3,18 (tháng 12 năm 2014) đến 4,7 (tháng 7 năm 2016): Khoảng 1500 nhà phát triển đã đóng góp cho mỗi bản phát hành từ khoảng 200-250 công ty trên mỗi bản phát hành. 30 nhà phát triển hàng đầu đã đóng góp hơn 16% mã. Trong khối doanh nghiệp, những công ty đóng góp nhiều nhất là Intel (12,9%) và Red Hat (8,0%), vị trí thứ ba và thứ tư được tổ chức bởi danh mục 'không' (7,7%) và 'không xác định' (6,8%)[138].

Quá trình phát triển[sửa | sửa mã nguồn]

Một nhà phát triển muốn thay đổi hạt nhân Linux bắt đầu bằng việc phát triển và thử nghiệm sự thay đổi đó. Tùy thuộc vào mức độ thay đổi đáng kể và số lượng hệ thống con mà nó thay đổi mà thay đổi sẽ bao gồm một bản vá hoặc nhiều bản vá. Trong trường hợp của một hệ thống con duy nhất được duy trì bởi một người bảo trì duy nhất, các bản vá này được gửi dưới dạng e-mail đến người duy trì hệ thống con với danh sách gửi thư thích hợp trong Cc. Người duy trì và độc giả của danh sách gửi thư sẽ xem xét các bản vá và cung cấp phản hồi. Khi quá trình xem xét kết thúc, người duy trì chấp nhận các bản vá lỗi trong cây hạt nhân của mình. Nếu những thay đổi này là sửa lỗi được coi là đủ quan trọng, yêu cầu kéo bao gồm các bản vá sẽ được gửi đến Linus Torvalds trong vòng vài ngày. Nếu không, yêu cầu kéo sẽ được gửi đến Linus Torvalds trong cửa sổ hợp nhất tiếp theo. Cửa sổ hợp nhất thường kéo dài hai tuần và bắt đầu ngay sau khi phát hành phiên bản hạt nhân trước đó.[139]

Linus Torvalds là nhân tố cuối cùng không chỉ qua những thay đổi được chấp nhận vào nhân Linux mà còn hơn những người có thể trở thành một người bảo trì. Các nhà bảo trì hạt nhân giữ vai trò của họ trừ khi họ tự nguyện đóng vai trò của họ. Không có ví dụ nào được biết về các nhà bảo trì hạt nhân đã được yêu cầu từ bỏ. Ngoài ra, không có ví dụ nào được biết đến về trình bảo trì hạt nhân đã bị chỉ trích vì kiểu tương tác của cô ấy với các nhà phát triển của Linus. Điều này mang đến cho người bảo trì một lượng năng lượng đáng kể. Mặc dù văn hóa trong cộng đồng phát triển hạt nhân đã được cải thiện qua nhiều năm, cộng đồng phát triển hạt nhân có tiếng tăm đôi khi rất thô lỗ.[140][141] Các nhà phát triển cảm thấy bị đối xử không công bằng có thể báo cáo điều này với Linux Foundation's Technical Advisory Board.[142] Một số thành viên cộng đồng hạt nhân không đồng ý với văn hóa thảo luận hiện tại.[143]

Ngôn ngữ lập trình[sửa | sửa mã nguồn]

Linux được viết bằng một phiên bản của ngôn ngữ lập trình C hỗ trợ bởi GCC (đã giới thiệu một số phần mở rộng và thay đổi cho tiêu chuẩn C), cùng với một số phần ngắn viết bằng hợp ngữ (trong cú pháp "AT&T-style" của GCC) cho kiến trúc đích. Bởi vì sự hỗ trợ mở rộng của C mà nó được viết, GCC trong một thời gian dài là trình biên dịch có thể dịch được đúng hạt nhân Linux.
Nhiều ngôn ngữ khác được sử dụng trong nhiều cách, chủ yếu liên quan đến quá trình biên dịch. Bao gồm Perl, Python và nhiều loại shell scripting.

Sự tương thích với các trình biên dịch[sửa | sửa mã nguồn]

GCCtrình biên dịch mặc định cho nguồn nhân Linux. Năm 2014, Intel ttuyên bố đã sửa đổi kernel để trình biên dịch C của họ cũng có khả năng biên dịch hạt nhân.[144] Có một báo cáo thành công như vậy trong năm 2009, với phiên bản kernel đã được sửa đổi 2.6,22.[145][146]

Từ năm 2010, nỗ lực đã được tiến hành để xây dựng nhân Linux với Clang, một trình biên dịch thay thế cho ngôn ngữ C;[147] kể từ ngày 12 tháng 4 năm 2014, kernel chính thức gần như có thể được biên dịch bằng Clang.[148][149] Dự án dành riêng cho nỗ lực này được đặt tên là LLVMLinux theo cơ sở hạ tầng trình biên dịch LLVM mà Clang được xây dựng.[150] LLVMLinux không nhằm mục đích phân nhánh hạt nhân Linux hoặc LLVM, do đó, đây là một siêu dự án bao gồm các bản vá cuối cùng được gửi cho các dự án ngược dòng. Bằng cách cho phép nhân Linux được Clang biên dịch, trong số các ưu điểm khác, được biết đến với khả năng biên dịch nhanh hơn so với GCC, các nhà phát triển nhân có thể được hưởng lợi từ quy trình làm việc nhanh hơn do thời gian biên dịch ngắn hơn.[151]

Xung đột cộng đồng phát triển[sửa | sửa mã nguồn]

Đã có một số xung đột đáng chú ý giữa các nhà phát triển nhân Linux. Ví dụ về những xung đột đó là:

  • Ngày 10 tháng 7 năm 2007 Con Kolivas tuyên bố rằng ông sẽ ngừng phát triển cho nhân Linux. Thảo luận về lý do của mình trong một cuộc phỏng vấn, ông bày tỏ sự thất vọng với các khía cạnh của quy trình phát triển nhân chính, mà ông cảm thấy không ưu tiên đủ cho tương tác máy tính để bàn, ngoài việc hack gây tổn hại cho sức khỏe, công việc và gia đình.[152][153]
  • Ngày 28 tháng 7 năm 2009, Alan Cox đã từ bỏ vai trò là người duy trì lớp TTY sau khi không đồng ý với Torvalds về phạm vi công việc cần thiết để sửa lỗi trong hệ thống con đó.[154]
  • Tháng 12 năm 2010, đã có một cuộc thảo luận giữa nhà bảo trì SCSI James bottomley và nhà duy trì SCST Vladislav Bolkhovitin về việc ngăn xếp mục tiêu SCSI nào sẽ được đưa vào nhân Linux - SCST hoặc LIO. Mặc dù tại thời điểm đó SCST được coi là vượt trội về mặt kỹ thuật, LIO đã được sáp nhập ngược dòng.[155] Điều này làm cho một số người dùng Linux buồn bã.[156]
  • Vào ngày 14 tháng 6 năm 2012 Linus Torvalds đã nói rất rõ rằng ông không đồng ý với việc NVIDIA phát hành trình điều khiển của mình dưới dạng trình điều khiển nguồn đóng.[157]
  • Ngày 6 tháng 10 năm 2014, Lennart Poettering đã cáo buộc Linus Torvalds dung túng kiểu thảo luận thô lỗ trong danh sách gửi thư liên quan đến nhân Linux và là một mô hình vai trò xấu.[158]
  • Ngày 5 tháng 3 năm 2015, Christoph Hellwig đã đệ đơn kiện VMware vì vi phạm bản quyền trên nhân Linux.[159] Linus Torvalds nói rõ rằng ông không đồng ý với việc này và các ý định tương tự bằng cách gọi luật sư là một bệnh hoạn.[160]

Các nhà phát triển nhân Linux nổi bật đã nhận thức được tầm quan trọng của việc tránh xung đột giữa các nhà phát triển.[161] Trong một thời gian dài, không có quy tắc ứng xử nào cho các nhà phát triển nhân do sự phản đối của Linus Torvalds.[162] Tuy nhiên, một Linux Kernel Code of Conflict đã được giới thiệu vào ngày 8 tháng 3 năm 2015.[163] Nó đã được thay thế vào ngày 16 tháng 9 năm 2018 bởi Code of Conduct dựa trên Giao ước cộng tác viên (Contributor Covenant). Điều này trùng hợp với một lời xin lỗi công khai của Linus và một thông báo rằng ông đang tạm nghỉ phát triển nhân.[164][165]

Codebase[sửa | sửa mã nguồn]

Phương diện luật pháp[sửa | sửa mã nguồn]

Điều khoản cấp phép[sửa | sửa mã nguồn]

Ban đầu, Torvalds phát hành Linux theo một giấy phép cấm sử dụng thương mại[166]. Điều này đã được thay đổi trong phiên bản 0.12 bằng cách chuyển sang Giấy phép Công cộng GNU (GPL).[19] Giấy phép này cho phép phân phối và bán các phiên bản có thể sửa đổi và chưa sửa đổi của Linux nhưng yêu cầu tất cả các bản sao đó phải được phát hành theo cùng một giấy phép và được kèm theo mã nguồn tương ứng hoàn chỉnh.

Torvalds đã mô tả việc cấp phép Linux theo GPL là "điều tốt nhất tôi từng làm".[166]

GPL v3[sửa | sửa mã nguồn]

Linux kernel chỉ được cấp phép rõ ràng theo phiên bản 2 của GPL,[4] mà không cung cấp cho người được cấp phép tùy chọn "bất kỳ phiên bản mới hơn", đây là một phần mở rộng GPL phổ biến. Đã có cuộc tranh luận đáng kể về việc giấy phép có thể được thay đổi dễ dàng để sử dụng các phiên bản GPL sau này (bao gồm cả phiên bản 3) và liệu sự thay đổi này có đáng mong muốn hay không.[167] Bản thân Torvalds đã chỉ định cụ thể khi phát hành phiên bản 2.4.0 rằng mã riêng của ông chỉ được phát hành trong phiên bản 2.[168] Tuy nhiên, các điều khoản của trạng thái GPL rằng nếu không có phiên bản nào được chỉ định thì có thể sử dụng bất kỳ phiên bản nào,[169] và Alan Cox chỉ ra rằng rất ít người đóng góp Linux khác đã chỉ định một phiên bản cụ thể của GPL.[170]

Tháng 9/2006, một cuộc khảo sát với 29 lập trình viên hạt nhân chính đã chỉ ra rằng 28 người thích GPLv2 hơn dự thảo hiện tại của GPLv3. Torvalds nhận xét: "Tôi nghĩ rằng một số người ngoài cuộc... tin rằng cá nhân tôi chỉ là người kỳ quặc vì tôi đã công khai không phải là một fan hâm mộ lớn của GPLv3."[171] Nhóm các nhà phát triển hạt nhân cao cấp này, bao gồm Linus Torvalds, Greg Kroah-Hartman và Andrew Morton, đã bình luận trên các phương tiện truyền thông đại chúng về sự phản đối của họ đối với GPLv3.[172] Họ đã đề cập đến các điều khoản liên quan đến DRM/tivoization, bằng sáng chế, "các hạn chế bổ sung" và cảnh báo Balkanisation của "Open Source Universe" của GPLv3.[172][173] Linus Torvalds, người quyết định không áp dụng GPLv3 cho nhân Linux, đã nhắc lại những lời chỉ trích của mình thậm chí nhiều năm sau đó.[174]

Loadable kernel modules[sửa | sửa mã nguồn]

Cuộc tranh luận liệu các loadable kernel modules (LKMs) có được coi là tác phẩm phái sinh theo luật bản quyền hay không, và do đó nằm trong các điều khoản của GPL.

Torvalds đã tuyên bố niềm tin của mình rằng các LKM chỉ sử dụng một tập hợp con giới hạn, "công khai" của các giao diện kernel đôi khi có thể là các tác phẩm không có nguồn gốc, do đó cho phép một số trình điều khiển chỉ nhị phân và các LKM khác không được cấp phép theo GPL.[cần dẫn nguồn] Một ví dụ điển hình cho việc này là việc sử dụng dma_buf bởi các trình điều khiển đồ họa Nvidia độc quyền. dma_buf là một tính năng kernel gần đây giống như phần còn lại của kernel, nó được cấp phép theo GPL), cho phép nhiều GPU nhanh chóng sao chép dữ liệu vào bộ đệm khung của nhau.[175] Một trường hợp sử dụng có thể là Nvidia Optimus kết hợp GPU nhanh với GPU tích hợp Intel, trong đó GPU Nvidia ghi vào bộ đệm khung Intel khi nó hoạt động. Nhưng, Nvidia không thể sử dụng cơ sở hạ tầng này vì nó sử dụng một phương tiện kỹ thuật để thực thi quy tắc rằng nó chỉ có thể được sử dụng bởi các LKM cũng là GPL. đã trả lời trên LKML, từ chối yêu cầu từ một trong các kỹ sư của họ để loại bỏ thực thi kỹ thuật này khỏi API. Tuy nhiên, không phải tất cả những người đóng góp nhân Linux đều đồng ý với cách giải thích này, và ngay cả Torvald cũng đồng ý rằng nhiều LKM là các tác phẩm có nguồn gốc rõ ràng, và thực sự ông viết rằng "các mô-đun hạt nhân là dẫn xuất 'theo mặc định'".[176]

Mặt khác, Torvalds cũng đã nói rằng "một vùng màu xám nói riêng giống như một trình điều khiển ban đầu được viết cho một hệ điều hành khác (nghĩa là rõ ràng không phải là một tác phẩm có nguồn gốc từ Linux). [...] ĐÓ là một khu vực màu xám, and _that_ is khu vực mà cá nhân tôi tin rằng một số mô-đun có thể được coi là không có nguồn gốc hoạt động đơn giản vì chúng không được thiết kế cho Linux và không phụ thuộc vào bất kỳ hành vi đặc biệt nào của Linux".[177] Trình điều khiển đồ họa độc quyền, đặc biệt, được thảo luận rất nhiều. Cuối cùng, có khả năng những câu hỏi như vậy chỉ có thể được giải quyết bởi một tòa án.

Firmware binary blobs[sửa | sửa mã nguồn]

Một điểm gây tranh cãi về cấp phép là việc sử dụng firmware "binary blobs" trong Linux kernel để hỗ trợ một số thiết bị phần cứng. Các tập tin này thuộc nhiều loại giấy phép, trong đó nhiều tập tin bị hạn chế và mã nguồn cơ bản chính xác của chúng thường không được biết.

Năm 2002, Richard Stallman đã tuyên bố tại sao, theo quan điểm của mình, những đốm màu đó làm cho nhân Linux không phải là một phần mềm miễn phí và việc phân phối nhân Linux "vi phạm GPL", đòi hỏi phải có "mã nguồn tương ứng hoàn chỉnh".[5] Năm 2008, Tổ chức Phần mềm Tự do Mỹ Latinh đã khởi động Linux-libre như một dự án tạo ra một biến thể hoàn toàn miễn phí của nhân Linux mà không có đối tượng độc quyền; nó được sử dụng bởi một số bản phân phối Linux hoàn toàn tự do, chẳng hạn như những bản phân phối được chứng nhận bởi Free Software Foundation, trong khi nó cũng có thể được sử dụng trên hầu hết các bản phân phối.[178]

Vào ngày 15 tháng 12 năm 2010, Dự án Debian đã thông báo rằng phiên bản ổn định tiếp theo của Debian "6.0 Squeeze" sẽ đi kèm với một hạt nhân "loại bỏ tất cả các bit phần mềm không tự do".[179] Chính sách này tiếp tục được áp dụng trong các bản phát hành Debian ổn định sau này.

Thương hiệu[sửa | sửa mã nguồn]

Linux là thương hiệu đã đăng ký của Linus Torvalds tại Mỹ và một số quốc gia khác. Đây là kết quả của một sự cố trong đó William Della Croce, Jr., người không tham gia vào dự án Linux, đã đăng ký nhãn hiệu tên và sau đó yêu cầu tiền bản quyền để sử dụng nó[180]. Một số người ủng hộ Linux đã yêu cầu tư vấn pháp lý và nộp đơn kiện chống lại Della Croce. Vấn đề đã được giải quyết vào tháng 8 năm 1997 khi nhãn hiệu được giao cho Linus Torvalds[181][182].

Tranh chấp SCO[sửa | sửa mã nguồn]

Đầu năm 2007, SCO đã đệ trình các chi tiết cụ thể về vi phạm bản quyền có mục đích. Mặc dù các tuyên bố trước đó rằng SCO là chủ sở hữu hợp pháp của 1 triệu dòng mã, họ chỉ xác định 326 dòng mã, hầu hết trong số đó là không bản quyền[183]. Vào tháng 8 năm 2007, tòa án trong vụ Novell đã phán quyết rằng SCO đã không thực sự sở hữu bản quyền của Unix[184], mặc dù Tòa án phúc thẩm thứ mười phán quyết vào tháng 8 năm 2009 rằng câu hỏi về người sở hữu bản quyền vẫn còn đúng cho bồi thẩm đoàn câu trả lời. Tòa án đã ra phán quyết ngày 30 tháng 3 năm 2010 có lợi cho Novell.[185]

Xem thêm[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ “Linux Logos and Mascots”. Linux Online. 2008. Bản gốc lưu trữ ngày 15 tháng 8 năm 2010. Truy cập ngày 11 tháng 8 năm 2009.
  2. ^ Balsa, Andrew D. “The linux-kernel mailing list FAQ”. Tux.Org. Lưu trữ bản gốc ngày 1 tháng 7 năm 2016.Quản lý CS1: bot: trạng thái URL ban đầu không rõ (liên kết)
  3. ^ Martens, China (ngày 28 tháng 7 năm 2006). “Linux creator Torvalds still no fan of GPLv3”. InfoWorld. IDG. Truy cập ngày 15 tháng 2 năm 2015.
  4. ^ a b “Linux Kernel Copying”. Bản gốc lưu trữ ngày 21 tháng 12 năm 2012. Truy cập ngày 25 tháng 9 năm 2013. 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. Lỗi chú thích: Thẻ <ref> không hợp lệ: tên “COPYING” được định rõ nhiều lần, mỗi lần có nội dung khác
  5. ^ a b Stallman, Richard (2002). “Linux, GNU, and freedom”. Free Software Foundation. Truy cập ngày 21 tháng 2 năm 2007. Lỗi chú thích: Thẻ <ref> không hợp lệ: tên “Blobs” được định rõ nhiều lần, mỗi lần có nội dung khác
  6. ^ “kernel/git/stable/linux-stable.git”. git.kernel.org. ngày 16 tháng 10 năm 2002. Bản gốc lưu trữ ngày 13 tháng 1 năm 2013. Truy cập ngày 21 tháng 8 năm 2012. path: root/firmware/WHENCE
  7. ^ “Linux Readme”. git.kernel.org.
  8. ^ a b “TOP500 Supercomputer Sites: Operating system Family / Linux”. Top500.org.
  9. ^ Richardson, Marjorie (ngày 1 tháng 11 năm 1999). “Interview: Linus Torvalds”. Linux Journal. Truy cập ngày 20 tháng 8 năm 2009.
  10. ^ “Free as in Freedom: Richard Stallman's Crusade for Free Software”. O'Reilly Media. O'Reilly Media. ISBN 0-596-00287-4.
  11. ^ Unix System Laboratories v. Berkeley Software, 832 F. Supp. 790 (D.N.J. 1993).
  12. ^ “The Linux Foundation Releases Linux Development Report”. The Linux Foundation. Lưu trữ bản gốc ngày 19 tháng 7 năm 2016. Truy cập ngày 15 tháng 11 năm 2018.Quản lý CS1: bot: trạng thái URL ban đầu không rõ (liên kết)
  13. ^ Kroah-Hartman, Greg. “The Linux Kernel Driver Interface”. Linux Kernel Documentation. Bản gốc lưu trữ ngày 21 tháng 12 năm 2016. Truy cập ngày 20 tháng 1 năm 2016.
  14. ^ Torvalds, Linus (ngày 25 tháng 9 năm 2016). “Re: GPLv3 Position Statement” (Danh sách thư). Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  15. ^ a b “Linux Kernel Copying”. Bản gốc lưu trữ ngày 21 tháng 12 năm 2012. Truy cập ngày 25 tháng 9 năm 2013. 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.
  16. ^ Torvalds, Linus (ngày 8 tháng 9 năm 2000). “Linux-2.4.0-test8” (Danh sách thư). lkml.iu.edu. Truy cập ngày 21 tháng 11 năm 2015. 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 Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  17. ^ Torvalds, Linus Benedict (ngày 26 tháng 8 năm 1991). “What would you like to see most in minix?”. Đã bỏ qua tham số không rõ |newsgroup= (trợ giúp); Đã bỏ qua tham số không rõ |message-id= (trợ giúp)
  18. ^ Torvalds, Linus Benedict (ngày 5 tháng 10 năm 1991). “Free minix-like kernel sources for 386-AT”. Đã bỏ qua tham số không rõ |newsgroup= (trợ giúp); Đã bỏ qua tham số không rõ |message-id= (trợ giúp)
  19. ^ a b Torvalds, Linus. “Release Notes for Linux v0.12”. The Linux Kernel Archives.
  20. ^ a b Summers, David W. (ngày 19 tháng 1 năm 1992). “Troubles with Partitions”. Truy cập ngày 7 tháng 1 năm 2007. Đã bỏ qua tham số không rõ |newsgroup= (trợ giúp); Đã bỏ qua tham số không rõ |message-id= (trợ giúp)
  21. ^ Clegg, Alan B. (ngày 31 tháng 3 năm 1992). “It's here!”. Truy cập ngày 7 tháng 1 năm 2007. Đã bỏ qua tham số không rõ |newsgroup= (trợ giúp); Đã bỏ qua tham số không rõ |message-id= (trợ giúp)
  22. ^ “Appendix A: The Tanenbaum-Torvalds Debate”. Open Sources: Voices from the Open Source Revolution. O'Reilly. 1999. ISBN 1-56592-582-3. Truy cập ngày 22 tháng 11 năm 2006.
  23. ^ Tanenbaum, Andy (ngày 29 tháng 1 năm 1992). “LINUX is obsolete”. Truy cập ngày 10 tháng 5 năm 2006. Đã bỏ qua tham số không rõ |newsgroup= (trợ giúp); Đã bỏ qua tham số không rõ |message-id= (trợ giúp)
  24. ^ Torvalds, Linus (ngày 9 tháng 5 năm 2006). “Hybrid kernel, not NT”. Truy cập ngày 6 tháng 1 năm 2007.
  25. ^ Tanenbaum, Andy (ngày 12 tháng 5 năm 2006). “Tanenbaum-Torvalds Debate: Part II”. VU University Amsterdam. Truy cập ngày 6 tháng 1 năm 2007.
  26. ^ a b Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. tr. 107. ISBN 9781119150794.
  27. ^ a b c d Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. tr. 108. ISBN 9781119150794.
  28. ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. tr. 1. ISBN 9783642607493.
  29. ^ a b Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. tr. 1–2. ISBN 9783642607493.
  30. ^ a b Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. tr. 16. ISBN 9783642607493.
  31. ^ Offline, Jeremy (ngày 13 tháng 10 năm 2001). “Kernel Release Numbering Redux”. KernelTrap. Bản gốc lưu trữ ngày 24 tháng 11 năm 2010. Truy cập ngày 30 tháng 10 năm 2010.
  32. ^ Torvalds, Linus. “RFD: Kernel release numbering” (Danh sách thư). LKML. Truy cập ngày 30 tháng 10 năm 2010. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  33. ^ Jeremy (ngày 4 tháng 8 năm 2006). “Linux: 2.6.16.y Lives On”. KernelTrap. Bản gốc lưu trữ ngày 14 tháng 9 năm 2010. Truy cập ngày 30 tháng 10 năm 2010.
  34. ^ Kroah-Hartman, Greg (ngày 3 tháng 8 năm 2006). “Adrian Bunk is now taking over the 2.6.16-stable branch” (Danh sách thư). Truy cập ngày 21 tháng 2 năm 2015. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  35. ^ Jeremy (ngày 23 tháng 3 năm 2006). “Linux: Maintaining A 2.6.16.y Tree”. KernelTrap. Bản gốc lưu trữ ngày 20 tháng 6 năm 2010. Truy cập ngày 30 tháng 10 năm 2010.
  36. ^ Bunk, Adrian (ngày 11 tháng 10 năm 2008). “Linux 2.6.27 will be a longtime supported kernel” (Danh sách thư). Truy cập ngày 30 tháng 10 năm 2010. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  37. ^ Kroah-Hartman, Greg (ngày 8 tháng 9 năm 2009). “Re: 2.6.27 maintenance plans after 2.6.32 is released” (Danh sách thư). Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  38. ^ “This Just Isn't Working Any More”. kerneltrap.org. ngày 18 tháng 9 năm 2007. Bản gốc lưu trữ ngày 27 tháng 1 năm 2008.
  39. ^ Rothwell, Stephen (ngày 12 tháng 2 năm 2008). “Announce: Linux-next (Or Andrew's dream:-))” (Danh sách thư). Truy cập ngày 30 tháng 10 năm 2010. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  40. ^ Corbet, Jonathan (ngày 21 tháng 10 năm 2010). “linux-next and patch management process”. LWN.net. Eklektix, Inc. Truy cập ngày 30 tháng 10 năm 2010.
  41. ^ “The Linux Kernel Archives”. Kernel.org. Truy cập ngày 22 tháng 1 năm 2014.
  42. ^ Linux Kernel Mailing List (ngày 17 tháng 6 năm 2005). “Linux 2.6.12”. git-commits-head (Danh sách thư).
  43. ^ Kroah-Hartman, Greg (tháng 4 năm 2008). “Linux Kernel Development: How Fast it is Going, Who is Doing It, What They are Doing, and Who is Sponsoring It” (PDF). Bản gốc lưu trữ ngày 12 tháng 9 năm 2019. Truy cập ngày 24 tháng 12 năm 2019.
  44. ^ Torvalds, Linus. “Linux 3.0 release”. Linux kernel mailing list.
  45. ^ Hachman, Mark (ngày 22 tháng 7 năm 2011). “Linux 3.0 Released; Linus Torvalds Explains Why You Shouldn't Care”. PC Magazine. Ziff Davis.
  46. ^ Leemhuis, Thorsten (19 tháng 5 năm 2011). “Linux Kernel Data”. The H. Heinz Heise.
  47. ^ Ryan Paul (ngày 4 tháng 3 năm 2012). “Linux kernel in 2011: 15 million total lines of code and Microsoft is a top contributor”. arsTechnica. Truy cập ngày 30 tháng 3 năm 2019.
  48. ^ “The Linux Foundation Releases Linux Development Report”. Linux Foundation. ngày 18 tháng 2 năm 2015. Bản gốc lưu trữ ngày 19 tháng 7 năm 2016. Truy cập ngày 20 tháng 2 năm 2015.
  49. ^ Michael Larabel (ngày 23 tháng 6 năm 2014). “Linux Kernel At 19.5 Million Lines Of Code, Continues Rising”. Phoronix. Truy cập ngày 23 tháng 6 năm 2015.
  50. ^ “Gartner Says Sales of Tablets Will Represent Less Than 10 Percent of All Devices in 2014” (Thông cáo báo chí). Egham, UK: Gartner. ngày 15 tháng 10 năm 2014. Truy cập ngày 19 tháng 10 năm 2014.
  51. ^ Lunden, Ingrid (ngày 15 tháng 10 năm 2014). “Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner”. TechCrunch. AOL. Truy cập ngày 23 tháng 10 năm 2014.
  52. ^ “Global PC Shipments Exceed Forecast with Mild Improvement in Consumer Demand, While Apple Moves to #5 Spot, According to IDC” (Thông cáo báo chí). Framingham, MA: IDC. ngày 8 tháng 10 năm 2014. Bản gốc lưu trữ 11 tháng Mười năm 2014. Truy cập ngày 19 tháng 10 năm 2014. Đã định rõ hơn một tham số trong |archiveurl=|archive-url= (trợ giúp)
  53. ^ Anthony, Sebastian (ngày 29 tháng 9 năm 2014). “Shellshock: A deadly new vulnerability that could lay waste to the internet (updated)”. ExtremeTech. Ziff Davis. Truy cập ngày 23 tháng 10 năm 2014. most consumer routers run an embedded version of Linux
  54. ^ Love, Robert (2010). Linux kernel development (bằng tiếng Anh). Addison-Wesley. tr. 338. ISBN 978-0-672-32946-3. OCLC 268788260.
  55. ^ “README”. git.kernel.org. Bản gốc lưu trữ ngày 24 tháng 7 năm 2012. Truy cập ngày 24 tháng 3 năm 2021.
  56. ^ “KernelBuild - Linux Kernel Newbies”. kernelnewbies.org. Lưu trữ bản gốc ngày 19 tháng 10 năm 2020. Truy cập ngày 13 tháng 9 năm 2020.
  57. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :11
  58. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :10
  59. ^ “The Sysctl Interface”. Linux.it. Lưu trữ bản gốc ngày 17 tháng 2 năm 2020. Truy cập ngày 13 tháng 9 năm 2020.
  60. ^ “sysctl(8) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 30 tháng 9 năm 2020. Truy cập ngày 13 tháng 9 năm 2020.
  61. ^ “procfs(5) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 24 tháng 9 năm 2020. Truy cập ngày 13 tháng 9 năm 2020.
  62. ^ “sched(7) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 17 tháng 7 năm 2020. Truy cập ngày 27 tháng 7 năm 2020.
  63. ^ “FAQ: Preemption”. kernelnewbies.org. 22 tháng 8 năm 2009. Lưu trữ bản gốc ngày 7 tháng 8 năm 2020. Truy cập ngày 7 tháng 5 năm 2015.
  64. ^ Jonathan Corbet (24 tháng 2 năm 2003). “Driver porting: the preemptible kernel”. LWN.net. Lưu trữ bản gốc ngày 10 tháng 8 năm 2020. Truy cập ngày 7 tháng 5 năm 2015.
  65. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :5
  66. ^ “Completely Fair Scheduler | Linux Journal”. Linuxjournal.com. Lưu trữ bản gốc ngày 3 tháng 8 năm 2020. Truy cập ngày 30 tháng 3 năm 2020.
  67. ^ “ioctl(2) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 20 tháng 7 năm 2020. Truy cập ngày 11 tháng 8 năm 2020.
  68. ^ “aio(7) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 12 tháng 4 năm 2020. Truy cập ngày 11 tháng 8 năm 2020.
  69. ^ “io_setup(2) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 20 tháng 8 năm 2020. Truy cập ngày 11 tháng 8 năm 2020.
  70. ^ “KVM”. Linux-kvm.org. Lưu trữ bản gốc ngày 28 tháng 3 năm 2020. Truy cập ngày 29 tháng 3 năm 2020.
  71. ^ “TechComparison - Linux Virtualization Wiki”. Virt.kernelnewbies.org. Lưu trữ bản gốc ngày 3 tháng 8 năm 2020. Truy cập ngày 29 tháng 3 năm 2020.
  72. ^ “Virtualization_support_through_KVM in Linux_2_6_20 - Linux Kernel Newbies”. Kernelnewbies.org. Lưu trữ bản gốc ngày 29 tháng 11 năm 2019. Truy cập ngày 29 tháng 3 năm 2020.
  73. ^ Coekaerts, Wim. “Linux mainline contains all the Xen code bits for Dom0 and DomU support”. blogs.oracle.com. Lưu trữ bản gốc ngày 3 tháng 8 năm 2020. Truy cập ngày 29 tháng 3 năm 2020.
  74. ^ “Xen celebrates full Dom0 and DomU support in Linux 3.0 – blog.xen.org”. 7 tháng 6 năm 2011. Bản gốc lưu trữ ngày 7 tháng 6 năm 2011. Truy cập ngày 29 tháng 3 năm 2020.
  75. ^ Wilk, Konrad Rzeszutek (31 tháng 1 năm 2014). “Linux 3.14 and PVH”. Xen Project (bằng tiếng Anh). Lưu trữ bản gốc ngày 29 tháng 3 năm 2020. Truy cập ngày 29 tháng 3 năm 2020.
  76. ^ “Introduction to Xen Virtualization | Virtualization Guide | openSUSE Leap 15.2”. doc.opensuse.org. Lưu trữ bản gốc ngày 28 tháng 9 năm 2020. Truy cập ngày 29 tháng 9 năm 2020.
  77. ^ “Virtualization technology | Virtualization Guide | openSUSE Leap 15.3”. doc.opensuse.org. Truy cập ngày 30 tháng 9 năm 2021.
  78. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :32
  79. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :4
  80. ^ Jake Edge (ngày 25 tháng 11 năm 2008). “Character devices in user space”. LWN.net. Truy cập ngày 7 tháng 5 năm 2015.
  81. ^ Jonathan Corbet (ngày 2 tháng 5 năm 2007). “UIO: user-space drivers”. LWN.net. Truy cập ngày 7 tháng 5 năm 2015.
  82. ^ Jonathan Corbet (ngày 24 tháng 2 năm 2003). “Driver porting: the preemptible kernel”. LWN.net. Truy cập ngày 7 tháng 5 năm 2015.
  83. ^ Kroah-Hartman, Greg. “The Linux Kernel Driver Interface”. Bản gốc lưu trữ ngày 4 tháng 11 năm 2013.
  84. ^ a b Nguyen, Binh (ngày 30 tháng 7 năm 2004). “Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy”. The Linux Documentation Project. Truy cập ngày 28 tháng 11 năm 2012.
  85. ^ “Linux kernel release 5.x — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 7 tháng 3 năm 2020. Truy cập ngày 4 tháng 1 năm 2020.
  86. ^ “COPYING”. git.kernel.org. Lưu trữ bản gốc ngày 2 tháng 9 năm 2021. Truy cập ngày 2 tháng 9 năm 2021.
  87. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên Linux_Licensing
  88. ^ “README\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree”. git.kernel.org. Lưu trữ bản gốc ngày 1 tháng 10 năm 2020. Truy cập ngày 18 tháng 4 năm 2020.
  89. ^ “syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree”. git.kernel.org. Lưu trữ bản gốc ngày 2 tháng 10 năm 2020. Truy cập ngày 18 tháng 4 năm 2020.
  90. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên stable-api-nonsense23
  91. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên stable-api-nonsense22
  92. ^ “1.Intro.rst - Documentation/process/1.Intro.rst - Linux source code (v5.8) - Bootlin”. elixir.bootlin.com. Truy cập ngày 8 tháng 8 năm 2020.
  93. ^ “syscalls”. man7. Lưu trữ bản gốc ngày 15 tháng 1 năm 2020. Truy cập ngày 28 tháng 1 năm 2020.
  94. ^ “intro(2) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 17 tháng 7 năm 2020. Truy cập ngày 16 tháng 7 năm 2020.
  95. ^ “clone”. man7.org. Lưu trữ bản gốc ngày 18 tháng 1 năm 2020. Truy cập ngày 28 tháng 1 năm 2020.
  96. ^ “feature_test_macros”. man7.org. Lưu trữ bản gốc ngày 19 tháng 1 năm 2020. Truy cập ngày 28 tháng 1 năm 2020.
  97. ^ “vdso(7) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 2 tháng 2 năm 2020. Truy cập ngày 2 tháng 2 năm 2020.
  98. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên :16
  99. ^ “futex(2) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 31 tháng 1 năm 2020. Truy cập ngày 2 tháng 2 năm 2020.
  100. ^ “syscall(2) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 21 tháng 1 năm 2020. Truy cập ngày 2 tháng 2 năm 2020.
  101. ^ “sysfs(5) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 18 tháng 1 năm 2020. Truy cập ngày 6 tháng 1 năm 2020.
  102. ^ “Rules on how to access information in sysfs — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 7 tháng 3 năm 2020. Truy cập ngày 6 tháng 1 năm 2020.
  103. ^ “Linux Foundation Referenced Specifications”. refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  104. ^ “LSB Specifications”. refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  105. ^ “Linux Standard Base Desktop Specification, Generic Part”. refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  106. ^ “Normative References”. refspecs.linuxfoundation.org. Lưu trữ bản gốc ngày 12 tháng 8 năm 2020. Truy cập ngày 3 tháng 2 năm 2020.
  107. ^ “Linux Standard Base Core Specification, Generic Part”. refspecs.linuxfoundation.org. Lưu trữ bản gốc ngày 29 tháng 11 năm 2019. Truy cập ngày 3 tháng 2 năm 2020.
  108. ^ “System V Application Binary Interface - Edition 4.1” (PDF). Sco.com. Lưu trữ (PDF) bản gốc ngày 13 tháng 12 năm 2019. Truy cập ngày 3 tháng 2 năm 2020.
  109. ^ “Xinuos Inc. | Developers | Gabi | 2003-12-17 | System V Application Binary Interface - DRAFT”. Sco.com. Lưu trữ bản gốc ngày 3 tháng 2 năm 2020. Truy cập ngày 3 tháng 2 năm 2020.
  110. ^ “Executable And Linking Format (ELF)”. Refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  111. ^ “elf(5) - Linux manual page”. man7.org. Lưu trữ bản gốc ngày 30 tháng 11 năm 2020. Truy cập ngày 18 tháng 11 năm 2020.
  112. ^ “Linux Standard Base Core Specification for X86-64”. Refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  113. ^ “System V Application Binary Interface - DRAFT”. Refspecs.linuxbase.org. Truy cập ngày 3 tháng 2 năm 2020.
  114. ^ Seyfarth, Ray (2012). Introduction to 64 Bit Intel Assembly Language Programming for Linux. tr. 170. ISBN 9781478119203.
  115. ^ “Anatomy of a system call, part 1 [LWN.net]”. lwn.net. Lưu trữ bản gốc ngày 18 tháng 8 năm 2020. Truy cập ngày 16 tháng 7 năm 2020.
  116. ^ “Anatomy of a system call, part 2 [LWN.net]”. lwn.net. Lưu trữ bản gốc ngày 6 tháng 8 năm 2020. Truy cập ngày 16 tháng 7 năm 2020.
  117. ^ Deucher, Alex (ngày 7 tháng 10 năm 2014). “AMD's New Unified Open Source Driver”. X.Org Foundation. Truy cập ngày 21 tháng 1 năm 2015.
  118. ^ “Symbols - Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 3 tháng 8 năm 2020. Truy cập ngày 8 tháng 2 năm 2020.
  119. ^ “Exported symbols and the internal API [LWN.net]”. Lwn.net. Lưu trữ bản gốc ngày 31 tháng 3 năm 2020. Truy cập ngày 15 tháng 3 năm 2020.
  120. ^ “Unexporting kallsyms_lookup_name() [LWN.net]”. Lwn.net. Lưu trữ bản gốc ngày 1 tháng 4 năm 2020. Truy cập ngày 15 tháng 3 năm 2020.
  121. ^ “Trees I: Radix trees [LWN.net]”. lwn.net. Lưu trữ bản gốc ngày 8 tháng 11 năm 2020. Truy cập ngày 13 tháng 11 năm 2020.
  122. ^ “Trees II: red-black trees [LWN.net]”. lwn.net. Lưu trữ bản gốc ngày 13 tháng 11 năm 2020. Truy cập ngày 13 tháng 11 năm 2020.
  123. ^ “Unreliable Guide To Hacking The Linux Kernel”. Kernel.org (ấn bản 1). 2005. Lưu trữ bản gốc ngày 16 tháng 2 năm 2020. Truy cập ngày 15 tháng 3 năm 2020.
  124. ^ “Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 7 tháng 3 năm 2020. Truy cập ngày 15 tháng 3 năm 2020.
  125. ^ “Unreliable Guide To Locking — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 7 tháng 3 năm 2020. Truy cập ngày 15 tháng 3 năm 2020.
  126. ^ “SCSI Interfaces Guide — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 2 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  127. ^ “libATA Developer's Guide — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 30 tháng 5 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  128. ^ “DRM Internals — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 1 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  129. ^ “Kernel Mode Setting (KMS) — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 11 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  130. ^ “Introduce DMA buffer sharing mechanism [LWN.net]”. lwn.net. Lưu trữ bản gốc ngày 11 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  131. ^ “Sharing CPU and GPU buffers on Linux*”. 01.org. 12 tháng 5 năm 2016. Lưu trữ bản gốc ngày 11 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  132. ^ “Buffer Sharing and Synchronization — The Linux Kernel documentation”. Kernel.org. Lưu trữ bản gốc ngày 1 tháng 6 năm 2020. Truy cập ngày 11 tháng 6 năm 2020.
  133. ^ “About mac80211”. Linux Kernel Organization, Inc. Lưu trữ bản gốc ngày 1 tháng 2 năm 2021. Truy cập ngày 8 tháng 6 năm 2014.
  134. ^ “Linux 802.11 Driver Developer's Guide — The Linux Kernel documentation”. Kernel.org. Truy cập ngày 19 tháng 11 năm 2021.
  135. ^ “Report on ABI changes in the Linux kernel”. Andrey Ponomarenko's ABI laboratory. 17 tháng 3 năm 2016. Lưu trữ bản gốc ngày 12 tháng 3 năm 2016. Truy cập ngày 16 tháng 3 năm 2016.
  136. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên stable-api-nonsense2
  137. ^ a b Marti, Don. “Are top Linux developers losing the will to code?”. ComputerworldUK (bằng tiếng Anh). Truy cập ngày 24 tháng 10 năm 2016.
  138. ^ “Linux Kernel Development Report 2016”. Bản gốc lưu trữ ngày 22 tháng 8 năm 2016.
  139. ^ “How the development process works”. Truy cập ngày 4 tháng 2 năm 2018.
  140. ^ Sharwood, Simon (ngày 6 tháng 10 năm 2015). “Linux kernel dev who asked Linus Torvalds to stop verbal abuse quits over verbal abuse”. The Register.
  141. ^ Corbet, Jonathan (ngày 6 tháng 11 năm 2017). “Bash the kernel maintainers”. LWN.net. Truy cập ngày 4 tháng 2 năm 2018.
  142. ^ “Code of Conflict”. Truy cập ngày 4 tháng 2 năm 2018.[liên kết hỏng]
  143. ^ Edge, Jake (ngày 31 tháng 1 năm 2018). “Too many lords, not enough stewards”. LWN.net. Truy cập ngày 4 tháng 2 năm 2018.
  144. ^ Kubbilun, Ingo A. (ngày 2 tháng 6 năm 2004). “Linux kernel patch for Intel Compiler” (bằng tiếng Đức). Pyrillion.org. Bản gốc lưu trữ ngày 22 tháng 7 năm 2011. Truy cập ngày 12 tháng 11 năm 2010.
  145. ^ timothy (ngày 26 tháng 2 năm 2009). “High Performance Linux Kernel Project — LinuxDNA”. Slashdot Linux. Dice Holdings. Truy cập ngày 30 tháng 10 năm 2010.
  146. ^ Ryan, Justin (ngày 25 tháng 2 năm 2009). “LinuxDNA Supercharges Linux with the Intel C/C++ Compiler”. Linux Journal. Belltown Media, Inc. Truy cập ngày 30 tháng 10 năm 2010.
  147. ^ Lelbach, Bryce (ngày 25 tháng 10 năm 2010). “Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)”. cfe-dev (Danh sách thư). Bản gốc lưu trữ ngày 7 tháng 9 năm 2015.
  148. ^ Larabel, Michael (ngày 12 tháng 4 năm 2014). “Linux 3.15 Can Almost Be Compiled Under LLVM's Clang”. Phoronix. Truy cập ngày 10 tháng 6 năm 2014.
  149. ^ Larabel, Michael. “Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel”. Phoronix. Truy cập ngày 20 tháng 11 năm 2014.
  150. ^ Edge, Jake (ngày 7 tháng 5 năm 2013). “LFCS: The LLVMLinux project”. LWN.net. Truy cập ngày 3 tháng 3 năm 2015.
  151. ^ Möller, Jan-Simon (ngày 2 tháng 2 năm 2014). “LLVMLinux: The Linux Kernel with Dragon Wings” (PDF). LLVM Project. Truy cập ngày 3 tháng 3 năm 2015.
  152. ^ “Why I quit: kernel developer Con Kolivas”. APC Magazine. ACP Magazines. ngày 24 tháng 7 năm 2007. Bản gốc lưu trữ ngày 7 tháng 7 năm 2011. Truy cập ngày 15 tháng 8 năm 2011.
  153. ^ Corbet, Jonathan (ngày 25 tháng 7 năm 2007). “Re: -mm merge plans for 2.6.23”. LWN.net. Truy cập ngày 10 tháng 2 năm 2018.
  154. ^ Cox, Alan (ngày 28 tháng 7 năm 2009). “Re: [PATCH] kdesu broken”. Truy cập ngày 10 tháng 2 năm 2018.
  155. ^ Rodrigues, Goldwyn (ngày 22 tháng 1 năm 2011). “A tale of two SCSI targets”. Truy cập ngày 14 tháng 2 năm 2018.
  156. ^ Steinmetz, Andreas (ngày 17 tháng 1 năm 2013). “LIO - the broken iSCSI target implementation”. Truy cập ngày 14 tháng 2 năm 2018.
  157. ^ Paul, Ryan (ngày 19 tháng 6 năm 2012). “Linus Torvalds says "f–k you" to NVIDIA”. Truy cập ngày 14 tháng 2 năm 2018.
  158. ^ Poettering, Lennart (ngày 6 tháng 10 năm 2014). “On the sickness of the Linux Kernel Community”. Google+. Truy cập ngày 10 tháng 2 năm 2018.
  159. ^ Brodkin, Jon (ngày 6 tháng 3 năm 2015). “VMware alleged to have violated Linux's open source license for years”. Ars Technica. Truy cập ngày 14 tháng 2 năm 2018.
  160. ^ McCarthy, Kieren (ngày 26 tháng 8 năm 2016). “Having offended everyone else in the world, Linus Torvalds calls own lawyers a 'nasty festering disease'. The Register. Truy cập ngày 14 tháng 2 năm 2018.
  161. ^ Corbet, Jonathan (ngày 10 tháng 9 năm 2007). “KS2007: Developer relations and development process”. LWN.net. Truy cập ngày 11 tháng 2 năm 2018.
  162. ^ Brodkin, Jon (ngày 16 tháng 7 năm 2013). “Linus Torvalds defends his right to shame Linux kernel developers”. ARS Technica. Truy cập ngày 11 tháng 2 năm 2018.
  163. ^ Corbet, Jonathan (ngày 9 tháng 3 năm 2015). “The kernel's code of conflict”. LWN.net. Truy cập ngày 11 tháng 2 năm 2018.
  164. ^ Corbet, Jonathan (ngày 18 tháng 9 năm 2018). “Code, conflict, and conduct”. LWN.net.
  165. ^ Cohen, Noam (ngày 19 tháng 9 năm 2018). “After Years of Abusive E-mails, the Creator of Linux Steps Aside”. The New Yorker.
  166. ^ a b Yamagata, Hiroo (ngày 3 tháng 8 năm 1997). “The Pragmatist of Free Software”. HotWired. Bản gốc lưu trữ ngày 10 tháng 2 năm 2007. Truy cập ngày 21 tháng 2 năm 2007.
  167. ^ Corbet, Jonathan (ngày 31 tháng 1 năm 2006). “GPLv3 and the kernel”. LWN.net. Truy cập ngày 21 tháng 2 năm 2007.
  168. ^ Torvalds, Linus (ngày 8 tháng 9 năm 2000). “Linux-2.4.0-test8” (Danh sách thư). Truy cập ngày 21 tháng 2 năm 2007. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  169. ^ “gnu.org”. www.gnu.org (bằng tiếng Anh). Truy cập ngày 18 tháng 10 năm 2017.
  170. ^ Cox, Alan (ngày 20 tháng 1 năm 2006). “Re: GPL V3 and Linux” (Danh sách thư). Truy cập ngày 21 tháng 2 năm 2007. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  171. ^ Shankland, Stephen (ngày 25 tháng 9 năm 2006). “Top Linux programmers pan GPL 3”. News.com. CNET. Truy cập ngày 21 tháng 2 năm 2007.[liên kết hỏng]
  172. ^ 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 (ngày 15 tháng 9 năm 2006). “Kernel developers' position on GPLv3: The Dangers and Problems with GPLv3”. LWN.net. Truy cập ngày 11 tháng 3 năm 2015. The current version (Discussion Draft 2) of GPLv3 on first reading fails the necessity test of section 1 on the grounds that there's no substantial and identified problem with GPLv2 that it is trying to solve. However, a deeper reading reveals several other problems with the current FSF draft: 5.1 DRM Clauses [...] 5.2 Additional Restrictions Clause [...] 5.3 Patents Provisions [...] since the FSF is proposing to shift all of its projects to GPLv3 and apply pressure to every other GPL licensed project to move, we foresee the release of GPLv3 portends the Balkanisation of the entire Open Source Universe upon which we rely.Quản lý CS1: sử dụng tham số tác giả (liên kết)
  173. ^ Petreley, Nicholas (ngày 27 tháng 9 năm 2006). “A fight against evil or a fight for attention?”. linuxjournal.com. Truy cập ngày 11 tháng 3 năm 2015. Second, the war between Linus Torvalds and other Kernel developers and the Free Software Foundation over GPLv3 is continuing, with Torvalds saying he's fed up with the FSF.
  174. ^ Linus Torvalds says GPL v3 violates everything that GPLv2 stood for Debconf 2014, Portland, Oregon (accessed ngày 11 tháng 3 năm 2015)
  175. ^ Clark, Rob; Semwal, Sumit (ngày 1 tháng 11 năm 2012). “DMA Buffer Sharing Framework: An Introduction” (PDF). Embedded Linux Conference. Truy cập ngày 2 tháng 8 năm 2014.
  176. ^ Torvalds, Linus (ngày 10 tháng 12 năm 2003). “RE: Linux GPL and binary module exception clause?” (Danh sách thư). Truy cập ngày 31 tháng 12 năm 2010. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  177. ^ Torvalds, Linus (ngày 3 tháng 12 năm 2003). “Re: Linux GPL and binary module exception clause?” (Danh sách thư). Truy cập ngày 12 tháng 11 năm 2010. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
  178. ^ “::[FSFLA]:: GNU Linux-libre project”. fsfla.org.
  179. ^ “Debian 6.0 "Squeeze" to be released with completely free Linux Kernel”. Debian. ngày 15 tháng 12 năm 2010. Truy cập ngày 8 tháng 1 năm 2011.
  180. ^ Hughes, Phil (ngày 1 tháng 8 năm 1997). “Linux Trademark Dispute”. Linux Journal. Belltown Media, Inc.
  181. ^ Hughes, Phil (ngày 1 tháng 3 năm 1997). “Action Taken on Linux Trademark”. Linux Journal. Belltown Media, Inc.
  182. ^ Gisselberg, Tonya (2010). “The Trademark History of Linux, the Operating System” (PDF). Gisselberg Law Firm, Inc. Bản gốc (PDF) lưu trữ ngày 11 tháng 7 năm 2011. Truy cập ngày 17 tháng 11 năm 2018.
  183. ^ Jones, Pamela (ngày 8 tháng 3 năm 2007). “Report from the Courthouse March 7 - Part 1 (IBM's Motion for DJ on 10th CC)”. Groklaw. Bản gốc lưu trữ 7 Tháng 8 2011. Truy cập 17 Tháng 11 2018. Kiểm tra giá trị ngày tháng trong: |ngày truy cập=|archive-date= (trợ giúp)
  184. ^ Jones, Pamela (ngày 10 tháng 8 năm 2007). “Court Rules: Novell owns the UNIX and UnixWare copyrights! Novell has right to waive!”. Groklaw.
  185. ^ Harvey, Tom (ngày 30 tháng 3 năm 2010). “Jury says Novell owns Unix copyrights”. The Salt Lake Tribune. MediaNews Group.

Đọc thêm[sửa | sửa mã nguồn]

Liên kết ngoài[sửa | sửa mã nguồn]