Tôi muốn biết liệu có thể thay đổi hạt nhân hay không, ví dụ, thay thế nhân Linux của Fedora thành nhân của FreeBSD.
Bây giờ, đã có Debian GNU / kFreeBSD . Tôi có thể tùy chỉnh bản phân phối Linux để chứa kernel BSD không?
Tôi muốn biết liệu có thể thay đổi hạt nhân hay không, ví dụ, thay thế nhân Linux của Fedora thành nhân của FreeBSD.
Bây giờ, đã có Debian GNU / kFreeBSD . Tôi có thể tùy chỉnh bản phân phối Linux để chứa kernel BSD không?
Câu trả lời:
Không, mỗi hạt nhân thực hiện các tính năng riêng theo cách riêng của mình. Có một lượng lớn khả năng tương thích POSIX nhưng một khi bạn thoát khỏi điều đó thì các tệp thực thi cần phải được biên dịch với các cơ chế kernel đã có. Nhiều dự án chứa mã nguồn chỉ được biên dịch nếu bạn nói rõ ràng rằng bạn đang biên dịch cho FreeBSD hoặc Linux. Đó chính là những gì kFreeBSD là. Các công cụ hỗ trợ kernel FreeBSD nhưng chúng phải được biên dịch cho nó.
Ví dụ: nếu bạn cố gắng sử dụng epoll_create
trên FreeBSD, mọi thứ sẽ không hoạt động như mong đợi.
Tất nhiên, bạn có thể biên dịch chéo các công cụ từ kiểu LFS của hệ thống BSD nhưng điều đó có thể sẽ mất mãi mãi. Không đơn giản như chỉ cần biên dịch một kernel mới.
FreeBSD không sử dụng nhân Linux - như tên gọi của nó, nó sử dụng nhân BSD.
Có thể thay thế một nhân Linux bằng một nhân Linux khác (một trong số đó bạn tự xây dựng hoặc một nhân bạn đã trích xuất từ một bản phân phối). Xin lưu ý rằng các chương trình không gian người dùng trong bản phân phối của bạn có thể phụ thuộc vào các tính năng hạt nhân cụ thể được biên dịch và có thể không hoạt động đúng nếu bạn chạy chúng trên kernel được xây dựng mà không có các tính năng đó. Ví dụ, một bản phân phối dựa trên systemd sẽ yêu cầu các nhóm trong kernel.
Đối với ví dụ bạn đề cập, có một bản phân phối GNU có thể được xây dựng cho nhân Linux hoặc cho nhân BSD. Trong nhiều trường hợp, có sự khác biệt về thời gian biên dịch (ví dụ #ifdef
) giữa các chương trình được biên dịch cho cả hai, ngay cả khi các hạt nhân quảng cáo cùng một ABI. Tối thiểu, các thư viện cấp thấp như Thư viện C Runtime phải chứa các ABI hạt nhân khác nhau.
Kernel là phần độc lập và được thay thế thường xuyên trong quá trình cập nhật hệ điều hành. Một số trình điều khiển độc quyền (NVIDIA, v.v.) có các tập lệnh cài đặt vá trình điều khiển vào nguồn kernel, xây dựng kernel đó và thay thế kernel hiện tại bằng kernel. Do đó, nếu bạn phát triển phiên bản kernel của riêng mình có thể thực hiện tất cả các chức năng cần thiết, thì đó không phải là vấn đề lớn để đưa nó vào và để lại phần còn lại của hệ điều hành. Tuy nhiên, hầu hết các "nhân mới" như vậy thường được lấy từ phiên bản chính thức gần đây.
Hạt nhân Solaris đã được chuyển theo cách này ở một mức độ nào đó, dẫn đến OpenSolaris chạy môi trường Gnome.
Tuy nhiên, việc đặt kernel hoàn toàn khác là nỗ lực đáng kể, vì các giao diện phải được bắc cầu. Điều này có thể yêu cầu nhiều lập trình C và không chỉ là về tập lệnh xây dựng.