Share to: share facebook share twitter share wa share telegram print page

Linux

Linux
Chim cánh cụt Tux
Chim cánh cụt Tux, biểu trưng và vật may mắn của Linux[1]
Nhà phát triểnCộng đồng,
Linus Torvalds
Viết bằngC, hợp ngữ cùng một số ngôn ngữ khác
Họ hệ điều hànhTương tự Unix
Tình trạng hoạt độngĐang hoạt động
Kiểu mã nguồnNguồn mở
Phiên bản đầu tiên17 tháng 9 năm 1991; 34 năm trước (1991-09-17)
Kho mã nguồngit.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
github.com/torvalds/linux
Đối tượng tiếp thịĐiện toán đám mây, hệ thống nhúng, máy tính lớn, thiết bị di động, máy tính cá nhân, máy chủ, siêu máy tính
Có hiệu lực trongĐa ngôn ngữ
Nền tảngAlpha, ARC, ARM, C-Sky, Hexagon, LoongArch, m68k, Microblaze, MIPS, Nios II, OpenRISC, PA-RISC, PowerPC, RISC-V, s390, SuperH, SPARC, x86, Xtensa
Loại nhânMonolithic
Không gian người dùngutil-linux là tiêu chuẩn,[a] nhưng nhiều lựa chọn khác cũng khả dụng, chẳng hạn như Busybox,[b] GNU,[c] Plan 9 from User Space[d]Toybox[e]
Ảnh hưởng bởiMinix, Unix
Giao diện người dùng
mặc định
Giấy phépGPLv2[13][f]
Website chính thứckernel.org
Bài viết liên quan
Hạt nhân Linux
Bản phân phối Linux

Linux (/ˈlɪnʊks/)[15] là một họ các hệ điều hành tự do nguồn mở tương tự Unix dựa trên nhân Linux,[16] một hạt nhân hệ điều hành được phát hành lần đầu tiên vào ngày 17 tháng 9 năm 1991 bởi Linus Torvalds.[17][18][19] Mặc dù có khá nhiều tranh cãi về việc phát âm Linux, nhưng theo như Linus chia sẻ: "Tôi không quá bận tâm việc mọi người phát âm tên tôi như thế nào, nhưng Linux luôn là Lih-nix". Linux thường được đóng gói thành các bản phân phối Linux.

Các bản phân phối bao gồm nhân Linux và các thư viện và phần mềm hệ thống hỗ trợ, nhiều thư viện được cung cấp bởi GNU Project. Nhiều bản phân phối Linux sử dụng từ "Linux" trong tên, nhưng Free Software Foundation khuyến khích sử dụng tên "GNU/Linux" để nhấn mạnh tầm quan trọng của phần mềm GNU, gây ra một số tranh cãi.[20][21]

Các bản phân phối Linux phổ biến[22][23][24] bao gồm Debian, Fedora Linux, Linux Mint, Arch Linux, và Ubuntu. Các bản phân phối thương mại bao gồm Red Hat Enterprise LinuxSUSE Linux Enterprise Server. Bản phân phối Desktop Linux bao gồm một windowing system như X11 hoặc Wayland, và một môi trường desktop giống như GNOME hay KDE Plasma. Các bản phân phối dành cho máy chủ có thể bỏ qua đồ họa hoàn toàn hoặc bao gồm một ngăn xếp giải pháp như LAMP. Vì Linux có thể phân phối lại miễn phí, bất kỳ ai cũng có thể tạo phân phối cho bất kỳ mục đích nào.[25]

Linux ban đầu được phát triển cho các máy tính cá nhân dựa trên kiến trúc Intel x86, nhưng sau đó đã được port sang nhiều nền tảng hơn bất kỳ hệ điều hành nào khác.[26] Do sự thống trị của Android trên điện thoại thông minh, Linux cũng có cơ sở được cài đặt lớn nhất trong tất cả các hệ điều hành có mục đích chung.[27][28] Mặc dù nó chỉ được sử dụng bởi khoảng 2.3% máy tính để bàn,[29][30] nhưng Chromebook, chạy Chrome OS dựa trên nhân Linux, thống trị thị trường giáo dục K–12 của Mỹ và chiếm gần 20% doanh số notebook dưới 300 đô la ở Mỹ.[31] Linux là hệ điều hành hàng đầu trên các máy chủ (hơn 96,4% trong số 1 triệu hệ điều hành máy chủ web hàng đầu là Linux),[32] dẫn đầu các hệ thống big iron như các hệ thống mainframe, và là hệ điều hành duy nhất được sử dụng trên các siêu máy tính TOP500 (kể từ tháng 11 năm 2017, đã dần dần loại bỏ tất cả các đối thủ cạnh tranh).[33][34][35]

Linux cũng chạy trên các hệ thống nhúng, tức là các thiết bị có hệ điều hành thường được tích hợp vào firmware và được thiết kế riêng cho hệ thống. Điều này bao gồm router, điều khiển tự động hóa, công nghệ nhà thông minh (giống như Google Nest),[36] TV (các smartTv của SamsungLG dùng TizenWebOS, tương ứng),[37][38][39] ô tô (ví dụ, Tesla, Audi, Mercedes-Benz, Hyundai, và Toyota đều dựa trên Linux),[40] máy quay video kỹ thuật số, video game console, và smartwatch.[41] Hệ thống điện tử của Falcon 9Dragon 2 sử dụng phiên bản Linux tùy biến.[42]

Linux là một trong những ví dụ nổi bật nhất của phần mềm tự do nguồn mở và của việc phát triển mã nguồn mở. Mã nguồn có thể được dùng, sửa đổi và phân phối - thương mại hoặc phi thương mại - bởi bất kỳ ai theo các điều khoản của giấy phép tương ứng, ví dụ như GNU General Public License.[25]

Lịch sử

Tiền thân

Linus Torvalds, tác giả chính của Linux kernel

Hệ điều hành Unix được hình thành và triển khai vào năm 1969, tại Phòng thí nghiệm Bell của AT&T tại Mỹ bởi Ken Thompson, Dennis Ritchie, Douglas McIlroy, và Joe Ossanna.[43] Phát hành lần đầu vào năm 1971, Unix ban đầu được viết bằng hợp ngữ, như thường lệ vào thời điểm đó. Vào năm 1973 theo cách tiếp cận tiên phong, nó đã được viết lại bằng ngôn ngữ lập trình C bởi Dennis Ritchie (trừ nhân (kernel) và I/O). Tính khả dụng của việc triển khai ngôn ngữ cấp cao của Unix đã giúp triển khai việc port của nó sang các nền tảng máy tính khác nhau dễ dàng hơn.[44]

Do một yêu cầu chống độc quyền trước đó cấm tham gia kinh doanh máy tính, AT&T được yêu cầu cấp phép mã nguồn của hệ điều hành cho bất kỳ ai yêu cầu. Do đó, Unix phát triển nhanh chóng và được các tổ chức học thuật và doanh nghiệp áp dụng rộng rãi. Năm 1984, AT&T thoái vốn khỏi Bell Labs; Được giải phóng nghĩa vụ pháp lý yêu cầu cấp phép miễn phí, Bell Labs bắt đầu bán Unix như một sản phẩm độc quyền, nơi người dùng không được phép sửa đổi hợp pháp Unix. Dự án GNU, khởi động năm 1983 bởi Richard Stallman, với mục tiêu tạo ra một "hệ thống phần mềm tương thích Unix hoàn chỉnh", toàn bộ bao gồm phần mềm tự do. Công việc bắt đầu vào năm 1984.[45] sau đó, năm 1985, Stallman khởi động Quỹ Phần mềm Tự do và viết Giấy phép Công cộng GNU (GNU GPL) năm 1989. Đến đầu những năm 1990, nhiều chương trình được yêu cầu trong một hệ điều hành (như các thư viện, trình biên dịch, trình soạn thảo, một Unix shell, và hệ thống quản lý cửa sổ) đã được hoàn thành, nhưng các thành phần cấp thấp cần thiết như trình điều khiển thiết bị, daemon, và nhân được gọi là GNU/Hurd, bị đình trệ và không được hoàn thiện.[46]

Trước Linux người ta đã phát triển 386BSD, tiền thân của NetBSD, OpenBSD và FreeBSD sau này, tuy nhiên vì những lý do pháp lý mà nó không được phát hành cho đến tận 1992. Torvalds đã nói rằng nếu có 386BSD hay GNU/Hurd trước (1991), có lẽ ông đã không tạo ra Linux.[47]

Andrew S. Tanenbaum tác giả của hệ điều hành MINIX

MINIX được phát triển bởi Andrew S. Tanenbaum, một giáo sư khoa học máy tính, và được phát hành năm 1987 như một hệ điều hành tương tự Unix tối thiểu hướng đến sinh viên và những người khác muốn tìm hiểu các nguyên tắc của hệ điều hành. Mặc dù mã nguồn hoàn chỉnh của MINIX có sẵn miễn phí, các điều khoản cấp phép đã ngăn không cho nó trở thành phần mềm tự do cho đến khi giấy phép thay đổi vào tháng 4 năm 2000.[48]

Ra đời

Năm 1991, khi theo học tại Đại học Helsinki, Torvalds trở nên tò mò về hệ điều hành.[49] Thất vọng vì việc cấp phép MINIX, lúc đó chỉ giới hạn sử dụng cho mục đích giáo dục,[48] ông bắt đầu làm việc với nhân hệ điều hành của chính mình, cuối cùng trở thành Linux.

Torvalds đã bắt đầu phát triển nhân Linux trên MINIX và các ứng dụng được viết cho MINIX cũng được sử dụng trên Linux. Sau đó, Linux trưởng thành và việc phát triển nhân Linux được tiếp tục trên các hệ thống Linux.[50] Các ứng dụng GNU cũng thay thế tất cả các thành phần MINIX, vì việc sử dụng mã có sẵn miễn phí từ GNU với một hệ điều hành còn non trẻ có nhiều lợi ích: mã nguồn được cấp phép theo GNU GPL có thể được sử dụng lại trong các chương trình máy tính khác miễn là chúng cũng được phát hành theo cùng một giấy phép hoặc một giấy phép tương thích. Từ một giấy phép cấm phân phối lại thương mại do ông tạo ra ban đầu, Torvalds bắt đầu chuyển sang sử dụng GNU GPL.[51] Các nhà phát triển tích hợp các thành phần GNU với nhân Linux, tạo ra một hệ điều hành đầy đủ chức năng và tự do.[52]

Đặt tên

Đĩa mềm 5,25 inch lưu giữ các phiên bản Linux đầu tiên

Linus Torvalds đã muốn đặt tên cho sáng chế của mình là "Freax", một cách chơi chữ khi ghép các từ "free", "freak", và "x" (một ám chỉ đến Unix). Trong thời gian bắt đầu công việc của mình trên hệ thống, một số makefiles của dự án bao gồm tên "Freax" trong khoảng nửa năm. Torvalds đã từng xem xét cái tên "Linux", nhưng ban đầu bác bỏ nó vì cho rằng như thế là quá tự cao tự đại.[53]

Để tạo điều kiện phát triển, các file đã được tải lên FTP server (ftp.funet.fi) của FUNET vào tháng 9 năm 1991. Ari Lemmke, bạn học của Torvalds tại Helsinki University of Technology (HUT), một trong những quản trị viên tình nguyện của máy chủ FTP tại thời điểm đó, không nghĩ rằng "Freax" là một cái tên hay. Vì vậy, ông đã đặt tên dự án là "Linux" trên máy chủ mà không hỏi ý kiến Torvalds.[53] Tuy nhiên, sau đó, Torvalds chấp thuận với "Linux".

Theo một bài đăng lên newsgroup bởi Torvalds[15], từ "Linux" nên được phát âm là (/ˈlɪnʊks/ LIN-uuks với một âm ‘i’ ngắn như trong ‘print’ và ‘u’ như trong ‘put’. Để mô tả rõ hơn "Linux" nên được phát âm như thế nào, ông đã thêm vào mã nguồn kernel một đoạn ghi âm của mình (listen).[54]. Tuy nhiên trong bản ghi âm "Linux" lại nghe giống như LEEN-uuks (/ˈlinʊks/ .

Tính thương mại và sự phổ biến

Ubuntu, một bản phân phối Linux phổ biến
Nexus 5X đang chạy Android

Việc sử dụng Linux trong môi trường sản xuất, thay vì chỉ được sử dụng bởi những người có sở thích, bắt đầu vào giữa những năm 1990 trong cộng đồng siêu máy tính, nơi các tổ chức như NASA bắt đầu thay thế các máy móc ngày càng đắt tiền của họ bằng các cụm bao gồm các máy tính rẻ tiền chạy Linux. Việc sử dụng thương mại bắt đầu khi DellIBM, rồi đến Hewlett-Packard lần lượt cung cấp hỗ trợ Linux để thoát khỏi sự độc quyền của Microsoft trong thị trường hệ điều hành máy tính để bàn.[55]

Ngày nay, các hệ thống Linux được sử dụng ở mọi nơi trong ngành máy tính,từ các hệ thống nhúng đến hầu như tất cả các siêu máy tính,[35][56] và có một vị trí vững trãi trong môi trường máy chủ, dưới dạng gói ứng dụng phổ biến LAMP chẳng hạn. Việc sử dụng các bản phân phối Linux trong máy tính để bàn gia đình và doanh nghiệp đang phát triển.[57][58][59][60][61][62][63] Các bản phân phối Linux cũng đã trở nên phổ biến trên thị trường netbook, với nhiều thiết bị được phát hành với các bản phân phối Linux tùy chỉnh được cài đặt và Google đã phát hành Chrome OS của riêng họ được thiết kế cho các netbook.

Thành công lớn nhất của Linux trong thị trường tiêu dùng có lẽ là thị trường thiết bị di động, với Android là một trong những hệ điều hành thống trị nhất trên điện thoại thông minh và rất phổ biến trên máy tính bảng và gần đây hơn là các thiết bị thông minh đeo trên người. Chơi game trên Linux cũng đang gia tăng với Valve cho thấy sự hỗ trợ của họ dành cho Linux và tung ra SteamOS, bản phân phối Linux của riêng dành cho việc chơi game. Các bản phân phối Linux cũng đã trở nên phổ biến với các chính quyền địa phương và quốc gia khác nhau, chẳng hạn như chính phủ liên bang Brazil.[64]

Việc phát triển ở hiện tại

Hệ thống giải trí trên máy bay khởi động hiển thị logo Linux

Greg Kroah-Hartman là người đứng đầu việc bảo trì và phát triển của nhân Linux.[65] William John Sullivan là giám đốc điều hành của Free Software Foundation,[66] nơi hỗ trợ các thành phần GNU.[67] Cuối cùng là các cá nhân và tập đoàn phát triển các thành phần không phải GNU của bên thứ ba. Các thành phần của bên thứ ba này bao gồm một khối lượng công việc khổng lồ và có thể bao gồm cả các mô-đun nhân và các ứng dụng người dùng và các thư viện.

Các nhà cung cấp và cộng đồng Linux kết hợp và phân phối kernel, các thành phần GNU và không phải GNU với phần mềm quản lý gói bổ sung tạo thành một bản phân phối Linux.

Thiết kế

Một hệ thống dựa trên Linux là một hệ điều hành tương tự Unix được mô-đun hóa, với phần lớn thiết kế cơ bản của nó dựa trên các nguyên tắc được Unix đề ra trong thập niên 1970 và 1980. Một hệ thống như vậy sử dụng hạt nhân nguyên khối gọi là Linux kernel, có nhiệm vụ kiểm soát các tiến trình, kết nối mạng, truy cập vào các thiết bị ngoại vi và hệ thống file. Các trình điều khiển thiết bị được tích hợp trực tiếp vào nhân hoặc được nạp vào trong lúc hệ thống đang chạy.[68]

GNU userland là một phần quan trọng của hầu hết các hệ thống dựa trên nhân Linux, với Android là ngoại lệ đáng chú ý. Thư viện C của GNU hoạt động như một lớp bọc cho các lời gọi hệ thống của nhân Linux cần thiết cho giao diện không gian người dùng; GNU toolchain là một tập hợp lớn các công cụ lập trình quan trọng đối với sự phát triển của Linux (bao gồm các trình biên dịch được sử dụng để xây dựng nhân Linux); và GNU coreutils (các trình tiện ích lõi) bao gồm nhiều công cụ Unix cơ bản. Dự án cũng phát triển Bash, một shell giao diện dòng lệnh phổ biến. Giao diện đồ họa người dùng (GUI) trong hầu hết các hệ thống Linux được xây dựng dựa trên một triển khai của X Window System.[69] Gần đây, cộng đồng Linux tìm cách tiến tới Wayland như giao thức máy chủ hiển thị mới thay cho X11. Nhiều dự án phần mềm nguồn mở khác đóng góp cho các hệ thống Linux.

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)

Các thành phần được cài đặt trong một hệ thống Linux bao gồm:[69][70]

  • Bootloader - như GRUB, LILO, SYSLINUX, hoặc Gummiboot. Đây là chương trình tải Linux kernel vào bộ nhớ chính của máy tính, nó được thực thi sau khi bật máy tính lên và quá trình khởi tạo firmware được thực hiện.
  • Một chương trình init. chẳng hạn như sysvinit truyền thống và systemd, OpenRC, Upstart mới hơn. Đây là tiến trình đầu tiên được nhân khởi động và là tiến trình gốc trong cây tiến trình, hay nói một cách khác tất cả các tiến trình đều được khởi động thông qua init. Init khởi động các tiến trình như các dịch vụ hệ thống và giao diện đăng nhập (giao diện đồ họa hay dòng lệnh).
  • Thư viện phần mềm, chứa mã (code) được sử dụng bởi các tiến trình đang chay. Trên các hệ thống Linux sử dụng các tập tin thực thi định dạng ELF, trình liên kết động quản lý việc sử dụng các thư viện động được gọi là ld-linux.so. Nếu hệ thống được thiết lập để người dùng tự biên dịch phần mềm, các file header cũng sẽ được thêm vào để mô tả giao diện của các thư viện đã cài đặt. Bên cạnh các thư viện phần mềm được sử dụng phổ biến nhất trên các hệ thống Linux là GNU C Library (glibc), còn có rất nhiều thư viện khác, chẳng hạn như SDLMesa.
    • Thư viện chuẩn C là một thư viện cần để chạy các chương trình C trên một hệ thống máy tính, với GNU C Library là tiêu chuẩn. Đối với các hệ thống nhúng, các lựa chọn thay thế như musl, EGLIBC (một phân nhánh glibc từng được Debian sử dụng) và uClibc (được thiết kế cho uClinux) đã được phát triển, mặc dù hai cái cuối cùng không còn được duy trì. Android sử dụng thư viện C của riêng mình, Bionic.
  • Các lệnh Unix cơ bản, với triển khai chuẩn là coreutils. Có các triển khai khác thay thể chẳng hạn như BusyBox được copyleft hay Toybox được cấp phép BSD.
  • Widget toolkit là các thư viện được sử dụng để xây dựng giao diện người dùng đồ họa (GUI) cho các ứng dụng phần mềm. Có sẵn nhiều widget toolkit bao gồm GTKClutter phát triển bởi GNOME project, Qt phát triển bởi The Qt CompanyEnlightenment Foundation Libraries (EFL) phát triển bởi nhóm Enlightenment.
  • Một hệ thống quản lý gói, ví dụ như dpkgRPM. Ngoài ra các gói còn có thể được biên dịch từ mã nhị phân hoặc mã nguồn trong các tarball.
  • Các chương trình giao diện người dùng như các shell dòng lệnh hoặc các môi trường cửa sổ.

Giao diện người dùng

Giao diện người dùng hay còn gọi là shell là một giao diện dòng lệnh (CLI shell) hay giao diện đồ họa người dùng (GUI shell), hoặc bộ điều khiển gắn liền với phần cứng (các hệ thống nhúng thường sử dụng). Với các hệ thống để bàn, mặc định giao diện thường là giao diện đồ họa người dùng, mặc dù giao diện dòng lệnh cũng có thể được sử dụng thông qua trình giả lập thiết bị đầu cuối hay các console ảo.

CLI shell là các giao diện người dùng dựa trên văn bản, sử dụng văn bản cho việc xuất và nhập. Linux shell chiếm ưu thế trong sử dụng là Bourne-Again Shell (bash), ban đầu được phát triển cho dự án GNU. Hầu hết các thành phần Linux cấp thấp, kể cả nhiều phần khác nhau của userland, chỉ sử dụng CLI. CLI đặc biệt phù hợp để tự động hóa các nhiệm vụ lặp đi lặp lại hoặc bị trì hoãn và cung cấp một kiểu giao tiếp giữa các tiến trình rất đơn giản.

Trên các hệ thống máy để bàn, giao diện người dùng phổ biến là các GUI shell được đóng gói cùng với các môi trường desktop mở rộng như KDE Plasma, GNOME, MATE, Cinnamon, LXDE, PantheonXfce, mặc dù có nhiều giao diện người dùng khác. Hầu hết các giao diện người dùng phổ biến đều dựa trên X Window System, hoặc được gọi tắt là "X" hoặc "X11". Nó cung cấp tính xuyên dụng mạng và cho phép một ứng dụng đồ họa chạy trên một hệ thống được hiển thị trên một hệ thống khác, nơi người dùng có thể tương tác với ứng dụng; tuy nhiên, một số phần mở rộng nhất định của X Window System không có khả năng hoạt động qua mạng.[71] Có một số máy chủ hiển thị X, trong đó khai triển tham chiếu X.Org Server là phổ biến nhất.

Các bản phân phối cho máy chủ có thể cung cấp giao diện dòng lệnh cho nhà phát triển và quản trị viên, nhưng cung cấp giao diện tùy chỉnh cho người dùng cuối, được thiết kế cho trường hợp sử dụng của hệ thống. Giao diện tùy chỉnh này được truy cập thông qua một máy khách cư trú trên một hệ thống khác, không nhất thiết phải dựa trên Linux.

Có vài loại trình quản lý của sổ cho X11 bao gồm tiling, dynamic, stackingcompositing. Trình quản lý cửa sổ cung cấp các phương thức để kiểm soát vị trí và cách trình bày của các cửa sổ ứng dụng riêng lẻ và tương tác với X Window System. Các trình quản lý cửa sổ đơn giản hơn như như dwm, ratpoison hay i3wm chỉ cung cấp một cung cấp các tính năng tối thiểu để điều khiển các cửa sổ, trong khi các trình quản lý cửa sổ phức tạp hơn như FVWM, Enlightenment hay Window Maker cung cấp nhiều tính năng hơn nhưng vẫn nhẹ hơn so với các môi trường desktop. Trình quản lý cửa sổ là một phần của cài đặt tiêu chuẩn của các môi trường desktop, chẳng hạn như Mutter (GNOME), KWin (KDE) hay Xfwm (xfce), mặc dù người dùng có thể chọn một trình quản lý cửa sổ khác nếu muốn.

Wayland là một giao thức máy chủ hiển thị nhằm thay thế cho giao thức X11; tuy nhiên tính đến năm 2014, nó không được tiếp nhận rộng rãi hơn. Không giống X11, Wayland không cần một trình quản lý của sổ phụ và trình quản lý compositing. Do đó, một Wayland compositor đóng vai trò vừa là máy chủ hiển thị, trình quản lý cửa sổ và trình quản lý. Weston là triển khai tham chiếu của Wayland, Trong khi Mutter của GNOME và KWin của KDE đang được port sang Wayland dưới dạng máy chủ hiển thị độc lập. Enlightenment đã được port thành công kể từ phiên bản 19.[72]

Hạ tầng đầu vào video

Linux hiện có hai API hiện đại giữa kernel và userspace để xử lý các thiết bị đầu vào video: V4L2 API cho video streams và radio, và DVB API cho truyền hình số.[73]

Do sự phức tạp và đa dạng của các thiết bị khác nhau và do số lượng lớn các định dạng và tiêu chuẩn được xử lý bởi các API nói trên, hạ tầng này cần phát triển để phù hợp hơn với các thiết bị khác. Ngoài ra, một thư viện thiết bị userland tốt là chìa khóa thành công để các ứng dụng userland có thể hoạt động với tất cả các định dạng được hỗ trợ bởi các thiết bị đó.[74][75]

Việc phát triển

Biểu đồ lịch sử phát triển của các hệ thống tương tự Unix. Linux chia sẻ cùng kiến trúc và ý tưởng (như một thành phần của chuẩn POSIX) nhưng không chia sẻ mã nguồn phi-tự-do với Unix hoặc MINIX.

Sự khác nhau cơ bản giữa Linux và nhiều hệ điều hành phổ biến đương thời là nhân Linux và các thành phần khác đều là phần mềm tự do mã nguồn mở. Linux không phải là một hệ điều hành duy nhất như vậy, mặc dù cho đến nay nó phổ biến nhất.[76] Vài giấy phép phần mềm tự do nguồn mở dựa trên copyleft: bất cứ sản phẩm nào sử dụng một phần mềm copyleft cũng phải là copyleft. Giấy phép thông dụng nhất của phần mềm tự do là giấy phép công cộng GNU (GNU General Public License - GPL), một dạng của copyleft, và được sử dụng cho nhân Linux và nhiều thành phần từ dự án GNU.[77]

Các bản phân phối của Linux được các nhà phát triển hướng đến khả năng tương tác với các hệ điều hành khác và các tiêu chuẩn trong tính toán. Các hệ thống Linux gắn chặt với các chuẩn POSIX,[78] SUS,[79] LSB, ISOANSI trong khả năng có thể, mặc dù cho đến nay chỉ có một bản phân phối Linux đã được chứng nhận POSIX.1, Linux-FT.[80][81]

Các dự án phần mềm tự do được phát triển thông qua việc cộng tác, nhưng lại thường được sản xuất độc lập với nhau. Tuy nhiên, việc giấy phép phần mềm rõ ràng cho phép phân phối lại cung cấp cơ sở cho các dự án quy mô lớn hơn, bằng cách thu các thập phần mềm được sản xuất bởi các dự án độc lập lại thành dạng một bản phân phối Linux.

Nhiều bản phân phối Linux quản lý tập hợp các gói phần mềm hệ thống và ứng dụng từ xa, có thể tải về và cài đặt thông qua kết nối mạng. Điều này cho phép người dùng thích ứng với hệ điều hành của họ theo những nhu cầu cá nhân. Các bản phân phối đều được duy trì bởi các cá nhân, các nhóm, tổ chức tình nguyền, và các công ty. Một bản phân phối chịu trách nhiệm cho cấu hình mặc định của hạt nhân Linux được sử dụng, bảo mật hệ thống chung, và nhìn chung là sự tích hợp chặt chẽ của các gói phần mềm khác nhau. Các bản phân phối khác nhau sử dụng các trình quản lý gói khác nhau như dpkg, Synaptic, YAST, apt, yum, Portage để cài đặt, xóa bỏ, và cập nhật tất cả các phần mềm trong hệ thống từ một vị trí trung ương.[82]

Cộng đồng

Một bản phân phối chủ yếu được thúc đẩy bởi các nhà phát triển và cộng đồng người dùng. Một số nhà cung cấp phát triển và tài trợ cho các bản phân phối của họ trên cơ sở tình nguyện, Debian là một ví dụ nổi tiếng. Những người khác duy trì phiên bản cộng đồng của các bản phân phối thương mại của họ, như Red Hat đang làm với Fedora, hay SUSE với openSUSE.[83][84]

Ở nhiều thành phố và khu vực, các hiệp hội địa phương được gọi là Linux User Groups (LUGs) tìm cách thúc đẩy các bản phân phối ưa thích của họ nói riêng và phần mềm miễn phí nói chung. Họ tổ chức các cuộc họp và cung cấp miễn phí các cuộc trình bày, đào tạo, hỗ trợ kỹ thuật và cài đặt hệ điều hành cho người dùng mới. Nhiều cộng đồng Internet cũng cung cấp hỗ trợ cho người dùng và nhà phát triển Linux. Hầu hết các bản phân phối và các dự án phần mềm tự do nguồn mở đều có các phòng chat IRC hoặc newsgroup. Các diễn đàn trực truyến là một phương tiện hỗ trợ khác, với các ví dụ đáng chú ý là LinuxQuestions.org và các diễn đàn cộng đồng khác nhau và các diễn đàn hỗ trợ một phân phối cụ thể, chẳng hạn như các diễn đàn cho Ubuntu, Fedora, và Gentoo. Các bản phân phối Linux còn lập các mailing list; thông thường sẽ có một chủ đề cụ thể như sử dụng hoặc phát triển trong mỗi mailing list.

Có một số trang web công nghệ tập trung vào Linux. Các tạp chí in về Linux thường đóng gói các đĩa chứa phần mềm hoặc thậm chí là các bản phân phối Linux hoàn thiện.[85][86]

Mặc dù các bản phân phối Linux thường miễn phí, một số tập đoàn lớn bán, hỗ trợ và đóng góp phát triển các thành phần của hệ thống và phần mềm tự do. Một phân tích về nhân Linux cho thấy 75% mã nguồn từ tháng 12 năm 2008 đến tháng 1 năm 2010 được phát triển bởi các lập trình viên làm việc cho các tập đoàn, còn lại khoảng 18% cho các tình nguyện viên và 7% không được phân loại.[87] Các tập đoàn lớn tham gia đóng góp bao gồm Dell, IBM, HP, Oracle, Sun Microsystems (giờ là một phần của Oracle) và Nokia. Một số tập đoàn, đặc biệt là Red Hat, CanonicalSUSE, đã xây dựng một doanh nghiệp quan trọng xung quanh các bản phân phối Linux.

Các gói phần mềm khác nhau trong một bản phân phối Linux dựa trên các giấy phép phần mềm tự do, trong đó nói rõ ràng về việc cho phép và khuyến khích sự thương mại hóa; mối quan hệ giữa một bản phân phối Linux nói chung và các nhà cung cấp riêng lẻ có thể được coi là cộng sinh. Một mô hình kinh doanh phổ biến của các nhà cung cấp thương mại là tính phí hỗ trợ, đặc biệt là đối với người dùng doanh nghiệp. Một số công ty cũng cung cấp một phiên bản doanh nghiệp chuyên biệt cho phân phối của họ, trong đó bổ sung các gói và công cụ hỗ trợ độc quyền để quản lý lượng cài đặt cao hơn hoặc để đơn giản hóa các tác vụ quản trị.

Một mô hình kinh doanh khác là cho đi phần mềm để bán phần cứng. Đây là điều bình thường trong ngành công nghiệp máy tính trước đây, khi các hệ điều hành như CP/M, Apple DOS và các phiên bản Mac OS trước phiên bản 7.6 cho phép sao chép tự do (nhưng không thể sửa đổi). Khi phần cứng máy tính được chuẩn hóa trong suốt những năm 1980, các nhà sản xuất phần cứng trở nên khó khăn hơn để kiếm lợi từ chiến thuật này, vì HĐH sẽ chạy trên máy tính có chung kiến trúc của bất kỳ nhà sản xuất nào khác.

Lập trình trên Linux

Hầu hết các ngôn ngữ lập trình đều hỗ trợ Linux trực tiếp hoặc thông qua các ports bên thứ ba của cộng đồng.[88] Các công cụ phát triển ban đầu được sử dụng để xây dựng cả ứng dụng Linux và chương trình hệ điều hành được tìm thấy trong GNU toolchain, bao gồm GNU Compiler Collection (GCC) và GNU Build System. Trong số đó, GCC cung cấp trình biên dịch cho Ada, C, C++, GoFortran. Nhiều ngôn ngữ lập trình có một bản triển khai tham khảo đa nền tảng hỗ trợ Linux, ví dụ như PHP, Perl, Ruby, Python, Java, Go, RustHaskell. Phát hành lần đầu năm 2003, dự án LLVM cung cấp một trình biên dịch mã nguồn mở đa nền tảng khác cho nhiều ngôn ngữ. Trình biên dịch độc quyền cho Linux bao gồm Intel C++ Compiler, Sun Studio, và IBM XL C/C++ Compiler. BASIC dưới dạng Visual Basic được hỗ trợ dưới các hình thức như Gambas, FreeBASIC, và XBasic, và BASIC nói chung như QuickBASIC hoặc Turbo BASIC dưới dạng QB64.

Một tính năng phổ biến của các hệ thống tương tự Unix là bao gồm các ngôn ngữ lập trình truyền thống có mục đích cụ thể như scripting, xử lý văn bản hay quản lý và cấu hình hệ thống nói chung. Các bản phân phối Linux hỗ trợ các shell script, awk, sedmake. Nhiều chương trình cũng có ngôn ngữ lập trình nhúng để hỗ trợ việc cấu hình hoặc dùng trong lập trình. Ví dụ, biểu thức chính quy được hỗ trợ trong các chương trình như greplocate, MTA Sendmail truyền thống trên Unix chứa hệ thống scripting Turing-đầy đủ của riêng nó, và trình soạn thảo văn bản nâng cao GNU Emacs được xây dựng xung quanh trình một thông dịch Lisp thông dụng.

Hầu hết các bản phân phối cũng bao gồm hỗ trợ cho PHP, Perl, Ruby, Python và các ngôn ngữ động khác. Mặc dù không phổ biến bằng, nhưng đôi khi Linux cũng hỗ trợ C# (thông qua Mono), Vala, và Scheme. Guile Scheme đóng vai trò là một ngôn ngữ scripting của các tiện ích hệ thống GNU, tìm cách làm cho các chương trình C nhỏ, tĩnh tuân theo quy tắc Unix có thể được mở rộng nhanh chóng và linh hoạt thông qua một hệ thống scripting với lập trình hàm. Một số máy ảo Java và bộ công cụ phát triển Java trên Linux, bao gồm JVM (HotSpot) nguyên thủy của Sun và Hệ thống J2SE RE của IBM, cũng như nhiều dự án nguồn mở như Kaffe và JikeRVM.

GNOMEKDE là các môi trường desktop phổ biến và cung cấp một framework cho phát triển ứng dụng. Những dự án này dựa trên các widget toolkit tương ưng là GTKQt, mặt khác chúng cũng có thể được sử dụng độc lập với framework lớn hơn mình. Cả hai đều hỗ trợ nhiều ngôn ngữ. Có một số môi trường phát triển tích hợp có sẵn bao gồm Anjuta, Code::Blocks, CodeLite, Eclipse, Geany, ActiveState Komodo, KDevelop, Lazarus, MonoDevelop, NetBeans, và Qt Creator, trong khi các trình soạn thảo lâu đời như Vim, nanoEmacs vẫn còn phổ biến.[89]

Hỗ trợ phần cứng

Linux có mặt khắp nơi trên các loại phần cứng khác nhau.

Nhân Linux là nhân hệ điều hành được ported rộng rãi, có sẵn cho hàng loạt các thiết bị từ điện thoại di động cho đến siêu máy tính;nó chạy trên một loạt các kiến trúc máy tính rất độc đáo, bao gồm iPAQ dựa trên ARM và các mainframes System z9 hay System z10 của IBM.[90] Các bản phân phối chuyên biệt và các nhánh nhân tồn tại cho các kiến trúc ít chính thống hơn; ví dụ, nhân ELKS có thể chạy trên bộ vi xử lý 16 bit Intel 8086 hay Intel 80286, trong khi nhân µClinux có thể chạy trên các hệ thống mà không cần đơn vị quản lý bộ nhớ. Hạt nhân này cũng chạy trên các kiến trúc chỉ dành cho sử dụng hệ điều hành do nhà sản xuất tạo ra, chẳng hạn như máy tính Macintosh (với cả vi xử lý PowerPCIntel), PDA, video game consoles, máy nghe nhạc, điện thoại di động.

Có một số hiệp hội công nghiệp và hội nghị phần cứng dành cho việc duy trì và cải thiện hỗ trợ cho phần cứng đa dạng trong Linux, như là FreedomHEC. Theo thời gian, sự hỗ trợ cho các phần cứng khác nhau đã được cải thiện trong Linux, dẫn đến bất kỳ thiết bị nào cũng có "cơ hội tốt" để tương thích.[91]

Vào năm 2014, một sáng kiến mới đã được đưa ra để tự động thu thập cơ sở dữ liệu của tất cả các cấu hình phần cứng được thử nghiệm.[92]

Sử dụng

Bên cạnh các bản phân phối Linux được thiết kế để sử dụng cho mục đích chung trên máy tính để bàn và máy chủ, các bản phân phối có thể được chuyên dùng cho các mục đích khác nhau bao gồm: hỗ trợ kiến trúc máy tính, hệ thống nhúng, ổn định, bảo mật, bản địa hóa cho một vùng hoặc ngôn ngữ cụ thể, nhắm mục tiêu của các nhóm người dùng cụ thể, hỗ trợ cho các ứng dụng thời gian thực hoặc cam kết với một môi trường desktop nhất định. Hơn nữa, một số bản phân phối có chủ ý chỉ bao gồm phần mềm tự do. Năm 2015, hơn bốn trăm bản phân phối Linux được phát triển tích cực, với khoảng một chục bản phân phối phổ biến nhất cho mục đích sử dụng chung.[93]

Desktop

Các thành phần phần mềm có thể nhìn thấy của ngăn xếp desktop Linux bao gồm máy chủ hiển thị, widget engine, và một số bộ công cụ widget rộng rãi hơn. Ngoài ra còn có các thành phần không hiển thị trực tiếp cho người dùng cuối, bao gồm D-BusPulseAudio.

Sự phổ biến của Linux trên máy tính để bàn và máy tính xách tay tiêu chuẩn đã tăng lên trong những năm qua.[94] Các bản phân phối hiện đại phổ biến nhất bao gồm một môi trường người dùng đồ hoạ, tính đến tháng 2 năm 2015, hai môi trường phổ biến nhất được sử dụng là KDE Plasma DesktopXfce.[95]

Không có desktop Linux chính thức nào tồn tại: các môi trường desktop environments và bản phân phối Linux lưaqj chọn các thành phần từ các nhóm phần mềm tự do nguồn mở mà họ xây dựng một GUI triển khai một số hướng dẫn thiết kế ít nhiều nghiêm ngặt. Ví dụ, GNOME có hướng dẫn giao diện con người như một hướng dẫn thiết kế, giúp giao diện người máy đóng vai trò quan trọng, không chỉ khi thực hiện thiết kế đồ họa mà cả khi hỗ trợ người khuyết tật hay khi tập trung vào bảo mật.[96]

Bản chất hợp tác của phát triển phần mềm miễn phí cho phép các nhóm phân phối thực hiện bản địa hóa ngôn ngữ của một số bản phân phối Linux để sử dụng tại các địa phương nơi việc bản địa hóa các hệ thống độc quyền sẽ không hiệu quả về chi phí. Ví dụ, phiên bản tiếng Sinhalese của bản phân phối Knoppix đã có sẵn đáng kể trước khi Microsoft dịch Windows XP sang Sinhalese.[97] Trong trường hợp này, Lanka Linux User Group đã đóng một vai trò quan trọng trong việc phát triển hệ thống bản địa hóa bằng cách kết hợp kiến thức của các giáo sư đại học, nhà ngôn ngữ học và nhà phát triển địa phương.

Hiệu năng và ứng dụng

Hiệu năng của Linux trên desktop là một chủ đề gây tranh cãi;[98][99] ví dụ vào năm 2007 Con Kolivas đã cáo buộc cộng đồng Linux tập trung hiệu năng trên các máy chủ. Ông đã từ bỏ việc phát triển nhân Linux vì thất vọng với sự thiếu tập trung vào desktop, và sau đó trả lời phỏng vấn "nói tất cả" về chủ đề này.[100] Kể từ đó, một lượng phát triển đáng kể đã tập trung vào việc cải thiện trải nghiệm desktop. Các dự án như systemdUpstart (đã dừng năm 2014) nhằm mục đích cho thời gian khởi động nhanh hơn; các dự án WaylandMir nhằm mục đích thay thế X11 đồng thời tăng cường hiệu năng, bảo mật và giao diện của desktop.[101]

Nhiều ứng dụng phổ biến có sẵn cho nhiều hệ điều hành. Ví dụ, Mozilla Firefox, OpenOffice.org/LibreOfficeBlender có các phiên bản có thể tải xuống cho tất cả các hệ điều hành chính. Thêm vào đó, một số ứng dụng ban đầu được phát triển cho Linux, như Pidgin, và GIMP, đã được port đến các hệ điều hành khác (bao gồm WindowsmacOS) do mức độ phổ biến của chúng. Ngoài ra, ngày càng nhiều ứng dụng desktop độc quyền cũng được hỗ trợ trên Linux,[102] ví dụ như Autodesk MayaThe Foundry's Nuke trong lĩnh vực hoạt hình và hiệu ứng hình ảnh cao cấp. Ngoài ra còn có một số công ty đã port các trò chơi của riêng họ hoặc của các công ty khác sang Linux, với Linux cũng là một nền tảng được hỗ trợ trên cả hai dịch vụ phân phối kỹ thuật số phổ biến SteamDesura.[103]

Nhiều loại ứng dụng khác có sẵn cho Microsoft Windows và macOS cũng chạy trên Linux. Thông thường, một ứng dụng tự do sẽ tồn tại với các chức năng của ứng dụng được tìm thấy trên một hệ điều hành khác hoặc ứng dụng đó sẽ có phiên bản hoạt động trên Linux, ví dụ như với Skype và một vài video games như Dota 2 Team Fortress 2. Ngoài ra, dự án Wine cung cấp một lớp tương thích Windows để chạy các dứng dụng Windows chưa sửa đổi trên Linux. Nó được tài trợ bởi các doanh nghiệp thương mại bao gồm CodeWeavers,nơi sản xuất một phiên bản thương mại của phần mềm. Từ 2009, Google cũng đã đóng góp tài chính cho dự án Wine.[104][105] CrossOver, một giải pháp độc quyền dựa trên dự án Wine nguồn mở, hỗ trợ chạy các phiên bản Windows của Microsoft Office, các ứng dụng Intuit như là QuickenQuickBooks, Adobe Photoshop CS2, và nhiều game phổ biến như World of Warcraft. Trong các trường hợp khác, khi không có port Linux của một số phần mềm trong các lĩnh vực như xuất bản trên desktop[106] và âm thanh chuyên nghiệp,[107][108][109] thì có phần mềm tương đương có sẵn trên. Cũng có thể chạy các ứng dụng được viết cho Android trên các phiên bản của Linux khác bằng Anbox.

Thành phần và cài đặt

Bên cạnh các thành phần có thể nhìn thấy bên ngoài, chẳng hạn như trình quản lý cửa sổ X, một vai trò không rõ ràng nhưng khá trung tâm được triển khai bởi các chương trình được lưu trữ bởi freedesktop.org, như D-Bus hay PulseAudio; cả hai môi trường máy tính để bàn chính (GNOME và KDE) bao gồm chúng,mỗi môi trường cung cấp giao diện đồ họa được viết bằng bộ công cụ tương ứng (GTK hoặc Qt). Một máy chủ hiển thị là một thành phần khác, trong thời gian dài nhất đã giao tiếp trong giao thức máy chủ hiển thị X11 với các máy khách của nó; phần mềm nổi bật kết nối X11 bao gồm X.Org ServerXlib. Thất vọng về giao thức lõi X11 cồng kềnh, và đặc biệt là qua nhiều phần mở rộng của nó, đã dẫn đến việc tạo ra một giao thức máy chủ hiển thị mới, Wayland.

Việc cài đặt, cập nhật và gỡ bỏ phần mềm trong Linux thường được thực hiện thông qua việc sử dụng các trình quản lý gói như Synaptic Package Manager, PackageKit, và Yum Extender.Mặc dù hầu hết các bản phân phối Linux lớn đều có kho lưu trữ rộng rãi, thường chứa hàng chục nghìn gói, nhưng không phải tất cả phần mềm có thể chạy trên Linux đều có sẵn từ kho chính thức. Ngoài ra, người dùng có thể cài đặt các gói từ kho lưu trữ không chính thức, tải xuống các gói được biên dịch trước trực tiếp từ các trang web hoặc tự biên dịch mã nguồn. Tất cả các phương pháp này đi kèm với mức độ khó khác nhau; Việc biên dịch mã nguồn nói chung được coi là một quá trình đầy thách thức đối với người dùng Linux mới, nhưng hầu như không cần thiết trong các bản phân phối hiện đại và không phải là một phương pháp dành riêng cho Linux.

Netbooks

Các bản phân phối Linux cũng đã trở nên phổ biến trên thị trường netbook, với nhiều thiết bị như Asus Eee PCAcer Aspire One phân phối với các bản phân phối Linux tùy chỉnh được cài đặt.[110]

Năm 2009, Google đã công bố Chrome OS là một hệ điều hành tối thiểu dựa trên Linux, sử dụng trình duyệt Chrome làm giao diện người dùng chính. Chrome OS ban đầu chỉ chạy các ứng dụng web, ngoại trừ trình quản lý file và trình phát phương tiện đi kèm. Một mức hỗ trợ nhất định cho các ứng dụng Android đã được thêm vào trong các phiên bản sau này.[111] Kể từ năm 2018, Google đã thêm khả năng cài đặt bất kỳ phần mềm Linux nào trong một container,[112], cho phép Chrome OS được sử dụng như bất kỳ bản phân phối Linux nào khác. Netbooks được bán cùng với hệ điều hành, được gọi là Chromebook, bắt đầu xuất hiện trên thị trường vào tháng 6 năm 2011.[113]

Server, mainframe và siêu máy tính

Tổng quan rộng về gói phần mềm LAMP, được hiển thị ở đây cùng với Squid. Một giải pháp máy chủ web hiệu suất cao và tính sẵn sàng cao cung cấp bảo mật trong môi trường thù địch.

Các bản phân phối Linux từ lâu đã được sử dụng làm hệ điều hành máy chủ và đã trở nên nổi bật trong lĩnh vực đó; Netcraft đã báo cáo vào tháng 9 năm 2006, rằng tám trong số mười (hai công ty khác là "không rõ" hệ điều hành) công ty lưu trữ internet đáng tin cậy nhất đã chạy các bản phân phối Linux trên các máy chủ web của họ,[114] với Linux ở vị trí hàng đầu. Vào tháng 6 năm 2008, các bản phân phối Linux có 5 trong số 10, FreeBSD 3/10, và Microsoft 2/10;[115] kể từ tháng 2 năm 2010, các bản phân phối Linux chiếm sáu trên mười, FreeBSD 3/10, và Microsoft 1/10,[116] với Linux ở vị trí hàng đầu.

Các bản phân phối Linux là nền tảng của sự kết hợp phần mềm máy chủ LAMP (Linux, Apache, MariaDB/MySQL, Perl/PHP/Python) đã được các nhà phát triển phổ biến và là một trong những nền tảng phổ biến hơn để lưu trữ trang web.[117]

Các bản phân phối Linux đã trở nên ngày càng phổ biến trên các mainframes, một phần do giá cả và mô hình nguồn mở.[118] Vào tháng 12 năm 2009, gã khổng lồ máy tính IBM đã báo cáo rằng họ sẽ chủ yếu tiếp thị và bán Enterprise Linux Server. dựa trên mainframes[119] Tại LinuxCon North America 2015, IBM đã công bố LinuxONE, một loạt các mainframes được thiết kế đặc biệt để chạy Linux và phần mềm nguồn mở.[120][121]

Các bản phân phối Linux