Trước khi xắn tay áo để viết chương trình đầu tiên, chúng ta sẽ ngược dòng lịch sử một chút để tìm hiểu về nguyên nhân ra đời và quá trình phát triển của hệ điều hành Linux. Bài viết này sẽ tóm tắt ngắn gọn lịch sử phát triển của hệ điều hành Linux cũng như sự cần thiết của việc ra đời của các tiêu chuẩn quan trọng giúp cho hệ điều hành Linux được đóng góp phát triển như ngày nay.
Hệ điều hành Linux
Linux là một hệ điều hành máy tính mã nguồn mở (open source) và tự do (free) dạng Unix-like (giống kiểu hệ điều hành Unix) được xây dựng trên nền của nhân Linux (Linux kernel).
Phiên bản Linux kernel đầu tiên được release vào năm 1991 bởi Linus Tovard khi ông còn là một sinh viên đại học Helsinki ở Phần Lan. Ban đầu, Linux kernel chỉ được phát triển cho dòng chip 80386 của Intel. Trải qua quá trình đóng góp của nhiều cá nhân đam mê và các tổ chức lớn nhỏ, nó đã lớn mạnh để hỗ trợ được số lượng lớn các kiến trúc vi xử lý và được sử dụng cho rất nhiều ứng dụng khác nhau từ máy tính cá nhân đến các siêu máy tính, các thiết bị nhúng, server và cả các thiết bị di động. Có thể các bạn đã biết, hệ điều hành di động lớn nhất thế giới hiện tại là Android cũng được chạy trên nền tảng nhân của Linux. Để hiểu rõ hơn về quá trình phát triển và tinh thần phát triển của Linux, chúng ta sẽ điểm qua một chút về lịch sử của Linux, bắt đầu từ dự án GNU.
Dự án GNU
Dự án GNU được bắt đầu vào năm 1984 bởi một lập trình viên tài năng đang làm việc tại MIT là Richard Stallman với mong muốn tạo ra một hệ điều hành tự do (free software) thay cho hệ điều hành độc quyền Unix thời đó. Có nhiều người hiểu nhầm về từ free trong ngữ cảnh này là miễn phí, nhưng triết lý của từ free trong các hệ thống mã nguồn mở là freedom (tự do) chứ không phải free of charge (không mất phí). Nội dung cơ bản về tự do này là: tự do sử dụng source code, sửa chữa source code và build theo ý của người dùng và tự do phân phối lại nó cho cá nhân hoặc tổ chức khác.
Trên tinh thần này, Stallman đã bắt đầu dự án GNU đồng thời kêu gọi cộng đồng tham gia phát triển, và một trong những thành quả quan trọng là sự ra đời của Giấy phép công cộng chung GNU (GNU General Public License – GPL), một giấy phép không thể thiếu để phân phối các phần mềm tự do, bao gồm cả nhân Linux sau này. Bạn sẽ thấy được tầm quan trọng của giấy phép GPL khi bạn bắt tay vào lập trình Linux. Thật vậy, khi tải source code của một công cụ mã nguồn mở hoặc Linux kernel về máy, bạn sẽ thấy sự hiện diện về thông tin cũng như cảnh báo của giấy phép GPL ở khắp nơi trong source code. Ví dụ như sau:
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
Hoặc:
EXPORT_SYMBOL_GPL(pci_power_name); //export symbol pci_power_name cho các module được cấp phép GPL khác |
Dự án GNU tuy không thể tạo ra được một kernel chạy hoàn chỉnh, nhưng đã tạo ra được rất nhiều chương trình, công cụ hữu ích chạy cho hệ điều hành Unix-like. Các công cụ nổi tiếng của GNU mà được dùng phổ biến hiện nay như trình soạn thảo Emacs, công cụ biên dịch GNU Compiler Collection (GCC), bash và thư viện glibc (GNU C library).
Nhân Linux (Linux kernel)
Nhân Linux được ra đời bởi Linus Tovard năm 1991 chính là mảnh ghép quan trọng còn thiếu có thể kết hợp với dự án GNU để trở thành một hệ điều hành hoàn chỉnh và lớn mạnh như ngày nay.
Tại thời điểm Linus Tovard nhen nhóm kế hoạch tạo ra Linux kernel, đã có một kernel hệ điều hành tồn tại là Minix kernel. Tuy Minix kernel có source code đầy đủ, được build hoàn chỉnh và chạy được trên kiến trúc 386 nhưng nó chỉ được tạo ra như một công cụ phục vụ giảng dạy. Do đó, Minix kernel không có khả năng độc lập với các kiến trúc phần cứng khác cũng như phát huy được đầy đủ khả năng của vi xử lý đó.
Kể từ khi ra mắt phiên bản đầu tiên, Linux kernel đã được phát triển không ngừng và cho ra mắt phiên bản mới thường xuyên khiến cho nó ngày càng hoàn chỉnh. Ban đầu được viết cho dòng chíp Intel I80386, nhưng đến nay Linux đã có thể port được sang nhiều kiến trúc phần cứng khác như Arm, Mips, PowerPC … Và danh sách các kiến trúc có thể port được Linux sẽ ngày còn không ngừng tăng lên.
Phân phối Linux
Nói một cách chính xác, tên gọi Linux chỉ là nhân (kernel) của một hệ điều hành được phát triển bởi Linus Tovard cùng nhiều cá nhân và các tổ chức khác. Bản thân Linux kernel không tạo thành một hệ điều hành hoàn chỉnh mà chúng ta đang sử dụng trên máy tính của mình. Tuy nhiên, do tầm quan trọng của Linux kernel, mọi người đã thành thói quen khi nhắc đến Linux là ám chỉ không chỉ Linux kernel mà còn cả các phần mềm (tool hoặc thư viện) khác kết hợp với nhau tạo thành một hệ điều hành hoàn chỉnh.
Thật vậy, bạn thử kiểm tra tên hệ điều hành của môi trường bạn đang làm việc bằng câu lệnh “unane -r” trên terminal của mình xem, nó sẽ có dạng như thế này:
minhlv@vimentor:~/wORK/linux_kernel/linux-4.9/kernel$ uname -o
GNU/Linux |
Vậy đó, hệ điều hành của bạn là GNU/Linux, nghĩa là kết hợp bởi Linux kernel và các phần mềm của GNU nữa, chứ không phải chỉ có Linux đâu nhé.
Trong những ngày đầu của Linux, người dùng phải tự tay lắp ráp các phần mềm này cài đặt với Linux kernel để tạo ra hệ điều hành hoàn chỉnh cho máy tính của mình. Việc này khá bất tiện vì mất thời gian và đòi hỏi người dùng phải có kiến thức cơ bản về phần mềm. Để giải quyết bài toán này, các công ty và các tổ chức được gọi là nhà phân phối Linux (Linux distributors) đã tạo ra các gói (distributions) để tự động hóa hầu hết quá trình cài đặt Linux kernel và các phần mềm cần thiết. Việc này có hiệu quả to lớn trong việc phổ biến Linux đến tay người dùng như hiện nay.
Những bản phân phối Linux nổi tiếng được sử dụng hiện nay kể đến như phân phối phi thương mại Debian và RedHat. Hoặc một phân phối đang phát triển rất phổ biến hiện nay là Ubuntu.
Các tiêu chuẩn Unix và Linux
Quay trở lại với lịch sử phát triển của hệ điều hành Unix, tiền thân và cũng là nền tảng cho Linux ra đời và phát triển. Sau 6 phiên bản release, hệ điều hành Unix đã phân nhánh từ phiên bản release thứ 7 thành BSD và System V. Kể từ thời điểm này, các công ty và tổ chức đua nhau phát triển các biến thể của hệ điều hành của mình dựa trên một trong hai, hoặc thậm chí kết hợp cả hai biến thể Unix này để lại sinh ra các biến thể khác nhau. Việc mạnh ai nấy làm khiến cho việc phần mềm viết trên biến thể này không thể chạy trên biến thể khác, hoặc người dùng gặp rất nhiều khó khăn khi chuyển từ biến thể này sang biến thể kia. Do đó, việc sinh ra các tiêu chuẩn cho hệ thống Unix để các ứng dụng có thể dễ dàng chuyển từ hệ thống này sang hệ thông khác là nhu cầu tất yếu. Chúng ta sẽ tìm hiểu qua một số tiêu chuẩn quan trọng và phổ biến là POSIX và SUS.
POSIX
POSIX (Portable Operating System Interface) là một bộ tiêu chuẩn được phát triển bởi tổ chức IEEE (Institute of Electrical and Electronic Engineers) với mục đích tạo ra các sản phẩm tương thích linh động (portable) giữa các hệ điều hành. Ngoài việc quy định về các quy chuẩn lập trình hay các command line… POSIX còn cung cấp các API (ví dụ POSIX thread) cho người sử dụng. Một hệ điều hành có thể tuân thủ hoàn toàn (Solaris, macOS, HP-UX…) hoặc chỉ tuân thủ một phần (Android, BSD, Linux…) tiêu chuẩn POSIX.
Single UNIX Specification (SUS)
SUS (Single UNIX specification) là một tập hợp các tiêu chuẩn cho một hệ điều hành máy tính nền tảng Unix. Nếu một hệ điều hành được thẩm định và chứng nhận tuân thủ tiêu chuẩn SUS thì có thể được sử dụng thương hiệu UNIX. Thực tế bộ tiêu chuẩn SUS được xây dựng với lõi là bộ tiêu chuẩn POSIX. Vì vậy, sau này các tổ chức sở hữu các tiêu chuẩn POSIX và SUS đã nhóm họp với nhau để gộp lại và cho ra đời 1 bộ tiêu chuẩn mới là POSIX.1-2001 hay còn gọi là SUSv3 (Single UNIX specification Version 3). Bộ tiêu chuẩn chung này sau đó còn phát triển thêm một phiên bản nữa là POSIX.1-2008 /SUSv4 vào năm 2008.
Linux Standard Base (LSB)
Với các hệ điều hành thương mại UNIX, các công ty phát triển đồng thời cũng là nhà phân phối. Trong khi với Linux thì khác, việc phát triển và phân phối được tách rời. Linux kernel được phát triển mở bởi rất nhiều các cá nhân, tổ chức và công ty khác nhau, trong đó có cả các công ty phân phối Linux cũng muốn bắt tay vào phát triển Linux kernel theo ý mình. Vì vậy, tiêu chuẩn Linux Standard Base (LSB) ra đời với mục đích xây dựng các quy chuẩn cho các đơn vị phát triển và phân phối tuân thủ nhằm đảm bảo tính tương thích giữa các bản phân phối Linux. LSB về cơ bản vẫn dựa trên tiêu chuẩn POSIX, SUS và một số các tiêu chuẩn mở khác.
Kết luận
Với mục tiêu ban đầu chỉ là tạo ra một hệ điều hành Unix-like tự do cho các nhà phát triển, hệ điều hành Linux (hay chính xác hơn là GNU/Linux) đã nhanh chóng vượt qua hệ điều hành độc quyền Unix. Thậm chí Linux còn đang đe dọa cạnh tranh với gã khổng lồ Windows hiện nay. Với cộng đồng các nhà phát triển đông đảo và mạnh mẽ, Linux hứa hẹn sẽ còn tiềm năng phát triển và được ứng dụng rộng rãi hơn nữa. Còn chờ gì nữa, chúng ta bắt đầu vén tay áo lên và học lập trình Linux ngay thôi. 🙂