Nguồn của dịch vụ biên dịch trên mạng là gì, bản thân tâm lý của bạn trong linux [đã đóng]


11

Tôi đã sử dụng Linux một chút ở trường đại học và quen thuộc với các điều khoản. Tôi phát triển ngôn ngữ .NET thường xuyên, vì vậy tôi không biết chữ.

Điều đó nói rằng, tôi thực sự không thể nói rằng tôi hiểu tâm lý "biên dịch nó" [CIY] tồn tại trong các vòng tròn * nix. Tôi biết nó sẽ biến mất, nhưng thỉnh thoảng vẫn nghe thấy nó. Là một nhà phát triển, tôi biết rằng việc thiết lập trình biên dịch và các phụ thuộc cần thiết là một vấn đề khó khăn, vì vậy tôi cảm thấy các luồng công việc CIY đã giúp * nix trở nên ít truy cập hơn.

Những yếu tố xã hội hoặc kỹ thuật dẫn đến sự gia tăng của tâm lý CIY?


12
Bạn nghe thấy nó trong vòng tròn Linux hay UNIX ? Có một sự khác biệt lớn.
terdon

2
Linux có rất nhiều bản phân phối khác nhau, nó thực sự không có gì đáng ngạc nhiên. Bây giờ một số bản phân phối đang được phát hành như những người đi trước có các phiên bản được biên dịch, nhưng nó từng là một trang web không thực tế.
Centimane

8
Và đối với bản ghi, "thiết lập trình biên dịch và các phụ thuộc cần thiết" trên hệ thống Linux thực sự không khó lắm. Một số thậm chí có thể nói dễ dàng.
Deathgrip

6
@Darren - Đó là điều ngược lại, ngày nay hầu hết các tarball OpenSource đều tuân theo một tiêu chuẩn không tồn tại nhiều năm trước. Tải tarball, giải nén tarball, cd vào thư mục, chạy ./configure <options>, sau đó thực hiện và cài đặt. Tôi đã cắt răng 30 năm trước trên các máy chủ AT & T 3B2 chạy AT & T SysV Unix và Gould iron chạy UTX. Mọi thứ đã trở nên khó khăn hơn nhiều. Một số đã có sự khởi đầu của configurequá trình, hầu hết bạn phải chỉnh sửa thủ công makefile(s)cho hệ thống cụ thể của mình.
Deathgrip

1
@Deathgrip Thật vậy, bạn đã bao giờ thử thiết lập môi trường phát triển Windows để lập trình hệ thống mà không cần Visual Studio chưa? Đêm về không thể tôi nói với bạn.
con mèo

Câu trả lời:


27

Rất đơn giản, đối với phần lớn lịch sử của * nix, không có lựa chọn nào khác. Các chương trình được phân phối dưới dạng tarball nguồn và cách duy nhất bạn có khi sử dụng chúng là biên dịch từ nguồn. Vì vậy, nó không phải là một tâm lý như là một điều ác cần thiết.

Điều đó nói rằng, có những lý do rất tốt để tự biên dịch nội dung vì chúng sẽ được biên dịch riêng cho phần cứng của bạn, bạn có thể chọn tùy chọn nào để bật hoặc không và do đó bạn có thể kết thúc với một tệp thực thi được điều chỉnh tốt, giống như cách bạn thích . Tuy nhiên, điều đó rõ ràng chỉ là thứ gì đó có ý nghĩa đối với người dùng chuyên gia chứ không phải cho những người chỉ muốn một máy làm việc đọc email của họ.

Bây giờ, trong thế giới Linux, tất cả các bản phân phối chính đã rời khỏi đây từ nhiều năm trước. Bạn rất, rất hiếm khi cần tự biên dịch bất cứ thứ gì trong những ngày này trừ khi bạn đang sử dụng một bản phân phối được thiết kế dành riêng cho những người thích làm điều này như Gentoo. Tuy nhiên, đối với phần lớn các bản phân phối, người dùng trung bình của bạn sẽ không bao giờ cần phải biên dịch bất cứ thứ gì vì gần như mọi thứ họ cần sẽ có mặt và được biên soạn trong kho lưu trữ phân phối của họ.

Vì vậy, tâm lý CIY này khi bạn gọi nó về cơ bản đã biến mất. Nó có thể vẫn còn sống và hoạt động trong thế giới UNIX, tôi không có kinh nghiệm ở đó, nhưng trong Linux, nếu bạn đang sử dụng một bản phân phối phổ biến với một kho lưu trữ phong nha, bạn sẽ gần như không cần phải tự biên dịch bất cứ thứ gì.


5
Trong thế giới Unix, nó sẽ lại khác nhau tùy thuộc vào HĐH. Vị trí cuối cùng của tôi liên quan đến một số lượng lớn máy chủ Solaris (nền tảng Sun Sparc) và tôi đã chạy Solaris 10 x86 tại nhà như một máy tính để bàn trong vài năm. Tôi không thể nói cho HPUX hoặc AIX, nhưng bạn đã phải thực hiện một chút CIY trên Solaris. Sun đã phân phối một số tiện ích OpenSource được đóng gói sẵn cho Solaris. Ngoài ra còn có các trang web như opencsw.org và unixpackages.com. Nhưng tôi vẫn thực hiện khá nhiều phần biên dịch từ tarball nguồn.
Deathgrip

"đối với phần lớn lịch sử của * nix, không có lựa chọn nào khác. Các chương trình được phân phối dưới dạng tarball nguồn." - nhưng đó là tâm lý CIY, phải không?
Woodrow Barlow

2
@woodrow không thật. Không có lựa chọn nào khác. Đừng quên rằng * nix đã . Ngoài ra, hầu hết các chương trình được chuyển qua lại giữa các đồng nghiệp đã là chuyên gia và tại sao bạn lại bận tâm phát minh ra thứ gì đó phức tạp như trình cài đặt hoặc trình quản lý gói cho 8 người khác sử dụng mã của bạn? Khi các công cụ như vậy được phát minh, * nix folks bắt đầu sử dụng chúng giống như mọi người khác.
terdon

@WoodrowBarlow Không, bạn đang trao đổi nhân quả. Các chương trình được phân phối dưới dạng nguồn vì có rất nhiều nền tảng khác nhau (kiến trúc phần cứng khác nhau, hệ điều hành khác nhau, bộ thư viện khác nhau), vì vậy một tác giả chương trình sẽ cần phân phối hàng trăm hoặc hàng nghìn nhị phân để bao quát tất cả. CIY vẫn xuất hiện cho những người điều hành các nền tảng của người kỳ lạ, nhưng phần lớn các nền tảng chính thống của chương trình này, nơi các tệp nhị phân có sẵn từ các bản phân phối.
Gilles 'SO- ngừng trở nên xấu xa'

@terdon được rồi, tôi hiểu rồi. Tuy nhiên, tôi chỉ muốn chỉ ra rằng đoạn đó hơi mang tính thời sự. ở một mức độ nhất định, OP đã hỏi "tại sao các nhà phát triển * nix phân phối mã nguồn thay vì các tệp nhị phân được biên dịch?" và đoạn đầu tiên của bạn nói "bởi vì các nhà phát triển * nix phân phối mã nguồn thay vì các tệp nhị phân được biên dịch". vâng, tôi nhận ra tôi đang đơn giản hóa, nhưng tôi nghĩ câu trả lời của bạn sẽ rõ ràng hơn nếu bạn thêm các đối số từ nhận xét của bạn vào văn bản trả lời.
Woodrow Barlow

13

Có một vài nguyên nhân cho tâm lý đó, từ người dùng cuối, người duy trì phân phối và nhà cung cấp / nhà phát triển / nhóm dự án mã, và mỗi người trong số họ là hoàn toàn hợp lệ.

Khía cạnh nguồn mở

Có một số người thích biết rằng họ đang sử dụng Phần mềm miễn phí và xác thực điều đó bằng cách chọn biên dịch từ nguồn. Đây là nơi mà những thứ như dự án Linux From Scratch / howto / guide / book xuất hiện.

Các khía cạnh tối ưu hóa và tùy chọn

Bạn muốn biên dịch công cụ với tối ưu hóa cụ thể cho kiến ​​trúc CPU cụ thể của bạn? Có lẽ có một tùy chọn thời gian biên dịch (hoặc bản vá để tạo) để bật hoặc tắt một tính năng cụ thể mà bạn cần. Ví dụ về điều này có thể là vá lỗi hậu tố để có khả năng quản lý hạn ngạch hoặc sử dụng phân phối như Gentoo nơi bạn có thể chọn không sử dụng systemd hoặc bạn chọn đặc biệt để hỗ trợ ogg / theora / vorbis / bất cứ điều gì và KHÔNG mp3 do vấn đề cấp phép hay bất cứ cái gì.

Khía cạnh Kiến trúc CPU

Nơi làm việc của bạn có sử dụng máy không x86 / amd64 cao cấp không? Gói bạn cần / muốn có thể không được biên dịch sẵn cho kiến ​​trúc CPU của bạn, ít hơn bất kỳ phân phối nào bạn đang chạy. Cấp, hầu hết các nơi chạy loại phần cứng này cũng được hỗ trợ từ IBM, v.v. và không đi cài đặt / biên dịch công cụ willy-nilly. Nhưng nếu bạn chọn một sản phẩm từ việc bán dư thừa, hãy đào một bộ xử lý iMac w / PPC cũ, v.v?

Khía cạnh phân phối

Phân phối "gia đình" - tức là Debian w / Ubuntu, Mint, et al và RedHat với CentOS, Whitebox, Fedora, et al - đều sử dụng các định dạng gói khác nhau. Và mỗi phiên bản vận chuyển với các phiên bản thư viện khác nhau, v.v. Ngay cả đối với một tập lệnh shell tập tin đơn giản, việc thiết lập một tệp .deb Debian thích hợp cũng mất thời gian và công sức. Nếu bạn đã viết một số phần mềm để gãi ngứa và muốn làm cho nó miễn phí và đăng nó lên gitlab, máy chủ web của riêng bạn, bất cứ điều gì, bạn chỉ muốn đăng một tệp nguồn .tar.gz chung với hướng dẫn về cách xây dựng hoặc bạn muốn gói các phiên bản cho 2 phiên bản Debian (ổn định và thử nghiệm, có thể cũ), nhiều phiên bản Redhat và Fedora dưới dạng RPM, TGZ cho Slackware, hồ sơ ebuild cho Gentoo, v.v.


1
Một lý do khác là đôi khi nguồn ngược dòng vá một lỗi không nghiêm trọng cho một tính năng hoạt động trong phiên bản trước nhưng đã bị hỏng. Tuy nhiên, gói cho một bản phân phối ổn định hơn có thể không cập nhật gói trong nhiều tuần hoặc thậm chí vài tháng. Đây là một lý do tại sao một người dùng bình thường có thể muốn tìm hiểu cách biên dịch một số thứ từ nguồn. Ngoài ra, ngay cả các bản phân phối có tiếng về phần mềm gây chảy máu trong repos của họ như Arch sẽ bị tụt lại phía sau tại một số điểm. Biên dịch từ nguồn có nghĩa là tôi có thể có mọi thứ bạn đã đề cập, cộng với bất kỳ tính năng mới nào có thể đã được giới thiệu.

@ChronoKitsune Rất đúng; so sánh các phiên bản gói trong Gentoo (một bản phân phối CIY) với bất kỳ bản phân phối nào khác. Mới hơn nhiều. Thực hiện các hướng dẫn biên dịch dễ dàng hơn hàng ngàn lần so với việc tạo một gói nhị phân sẽ hoạt động trên mọi kiến ​​trúc. Điều đó có nghĩa là bạn sẽ sử dụng các tính năng phần mềm mới thú vị mà người khác sẽ không thấy trong một thời gian.
dogoncouch

9

Như @terdon nói, ngày nay nhu cầu biên dịch mọi thứ khá mỏng, đặc biệt là đối với người dùng gia đình.

Trước đây, trong thế giới Unix, tôi phụ thuộc rất nhiều vào việc biên dịch các nguồn, ví dụ như khi tôi quản lý các hệ thống Solaris, AIX, Ultrix, Digital Ultrix và HP / UX đôi khi không được nhà cung cấp duy trì hoặc triển khai trong số các dịch vụ phổ biến đã thua xa những dịch vụ thường được sử dụng bởi các Unix khác, bao gồm cả Linux.

Hiện tại vẫn có những nhu cầu thực sự để biên dịch mọi thứ, để có được một số phần mềm tối nghĩa hoặc lỗi thời hơn không có trong kho, hoặc sử dụng phiên bản mới hơn của gói mà bạn không có nhị phân tương thích hoặc khi nào bạn muốn thêm chức năng bổ sung hoặc hiếm khi, nếu bạn có thể viết một bản vá hoặc mô-đun cho nó.

Tôi cũng phải biên dịch phần mềm bằng tay khi thực hiện việc tái cấu trúc các hệ thống để chuyển sang Debian và / hoặc các phiên bản mới của Debian có khung không còn được HĐH hỗ trợ.

Ví dụ, trước đây tôi phải biên dịch bằng tay DHCP daemon để có sự hỗ trợ cho (thay vào đó là gần đây) Windows thay đổi giao thức hoặc hỗ trợ các bản vá cụ thể để cung cấp trong thế giới Viễn thông.

Tôi vẫn giữ các bản sửa lỗi kho lưu trữ cục bộ của mình cho các phiên bản FreeRadius do tôi tự biên soạn từ dev git repo, vì có một chuỗi các phiên bản ổn định có lỗi (nghiêm trọng) trong Debian và thường là các .deb tương ứng cho Debian / Ubuntu đầy đủ cho nhu cầu của chúng tôi.

Và không cần phải nói rằng thường trong một thời gian chúng ta cũng phải chạy / hoặc biên dịch những thứ được viết bởi chính chúng ta.

Việc cài đặt các phụ thuộc ngày nay không còn khó như trước đây và một số phần mềm thậm chí còn có các tệp quy tắc tùy chỉnh cho một số bản phân phối Linux phổ biến có tên phụ thuộc để biên dịch và thực hiện công việc nặng nề là tạo tệp gói với danh sách các phụ thuộc được tích hợp. Cài đặt gói như vậy từ kho lưu trữ cục bộ không khác nhiều so với cài đặt cùng gói từ kho chính thức.


4

Những yếu tố xã hội hoặc kỹ thuật nào dẫn đến sự gia tăng của tâm lý CIY?

Nguyên nhân sâu xa rõ ràng là lý do kỹ thuật: Tính di động nhị phân khó hơn tính di động nguồn . Ngoài các gói phân phối, hầu hết các phần mềm miễn phí vẫn chỉ có sẵn ở dạng nguồn vì điều đó thuận tiện hơn rất nhiều cho (các) tác giả / người bảo trì.

Cho đến khi các bản phân phối Linux bắt đầu đóng gói hầu hết mọi thứ mà mọi người bình thường muốn sử dụng, lựa chọn duy nhất của bạn là lấy nguồn và biên dịch nó cho hệ thống của riêng bạn. Các nhà cung cấp Unix thương mại thường không bao gồm những thứ mà hầu hết mọi người đều muốn (ví dụ như một trình bao đẹp như GNU bashhoặc tương tự), chỉ là việc triển khai shvà / hoặc của riêng họ csh, vì vậy bạn cần tự xây dựng công cụ nếu bạn (như một quản trị viên hệ thống) muốn để cung cấp một môi trường Unix đẹp cho người dùng của bạn để sử dụng tương tác.

Tình hình hiện nay, với hầu hết mọi người là quản trị viên duy nhất và người dùng duy nhất của máy ngồi trên máy tính để bàn của họ, khác rất nhiều so với mô hình Unix truyền thống. Một sysadmin đã duy trì phần mềm trên hệ thống trung tâm và trên máy tính để bàn của mọi người. (Thường bằng cách có các máy trạm của mọi người chỉ cần NFS-mount /opt/usr/local/từ máy chủ trung tâm và cài đặt công cụ ở đó.)


Trước những thứ như .NET và Java, tính di động nhị phân thực sự trên các kiến ​​trúc CPU khác nhau là không thể. Văn hóa Unix phát triển với tính di động nguồn là mặc định vì lý do này, với rất ít nỗ lực thậm chí cố gắng kích hoạt tính di động nhị phân cho đến khi những nỗ lực gần đây của Linux như LSB. Ví dụ, POSIX ( các tiêu chuẩn chính Unix) chỉ cố gắng chuẩn hóa nguồn di động, thậm chí trong các phiên bản gần đây.

Yếu tố văn hóa liên quan: Unix AT & T thương mại ban đầu đi kèm với mã nguồn (trên băng). Bạn không phải xây dựng hệ thống từ nguồn, nó chỉ ở đó trong trường hợp bạn muốn xem một cái gì đó thực sự hoạt động như thế nào khi các tài liệu không đủ.

Wikipedia nói :

"Chính sách Unix của tài liệu trực tuyến mở rộng và (trong nhiều năm) sẵn sàng truy cập vào tất cả các mã nguồn hệ thống đã làm tăng kỳ vọng của lập trình viên, và góp phần vào sự ra mắt năm 1983 của phong trào phần mềm miễn phí."

Tôi không chắc điều gì đã thúc đẩy quyết định này, vì việc cho phép khách hàng truy cập vào mã nguồn của phần mềm thương mại là chưa từng thấy trong những ngày này. Rõ ràng có một số thành kiến ​​văn hóa ban đầu theo hướng này, nhưng có lẽ đã phát triển từ nguồn gốc của Unix như là một hệ điều hành di động được viết chủ yếu bằng C (không phải ngôn ngữ lắp ráp) có thể được biên dịch cho các phần cứng khác nhau. Tôi nghĩ rằng nhiều hệ điều hành trước đó có nhiều mã được viết bằng asm cho một CPU cụ thể, vì vậy tính di động ở mức nguồn là một trong những thế mạnh ban đầu của Unix. (Tôi có thể sai về điều này; Tôi không phải là chuyên gia về Unix ban đầu, nhưng Unix và C có liên quan.)


Phân phối phần mềm ở dạng nguồn cho đến nay là cách dễ nhất để cho phép mọi người thích ứng nó với bất kỳ hệ thống nào họ muốn nó chạy trên đó. (Người dùng cuối hoặc người đóng gói nó cho bản phân phối Linux). Nếu phần mềm đã được đóng gói bởi / để phân phối, người dùng cuối chỉ có thể sử dụng phần mềm đó.

Nhưng thật quá nhiều để mong đợi các tác giả của hầu hết các gói tạo ra nhị phân cho mọi hệ thống có thể. Một số dự án lớn cung cấp nhị phân cho một vài trường hợp phổ biến (đặc biệt là x86 / windows trong đó HĐH không đi kèm với môi trường xây dựng và nhà cung cấp HĐH đã chú trọng lớn vào việc phân phối các trình cài đặt chỉ nhị phân).

Để một phần mềm chạy trên một hệ thống khác với hệ thống mà tác giả đã sử dụng thậm chí có thể yêu cầu một số thay đổi nhỏ, dễ dàng với nguồn . Một chương trình nhỏ một lần mà ai đó đã viết để tự gãi ngứa có lẽ chưa bao giờ được thử nghiệm trên hầu hết các hệ thống tối nghĩa. Có nguồn làm cho nó có thể thực hiện những thay đổi như vậy. Tác giả ban đầu có thể đã bỏ qua một cái gì đó, hoặc cố ý viết mã di động ít hơn vì nó tiết kiệm rất nhiều thời gian. Ngay cả các gói lớn như Info-ZIP cũng không có người kiểm tra trên mọi nền tảng ngay lập tức và cần mọi người gửi các bản vá tính di động của họ khi các vấn đề được phát hiện.

(Có các loại vấn đề về tính di động ở mức nguồn khác chỉ xảy ra do sự khác biệt trong bản dựng env và không thực sự liên quan đến vấn đề ở đây. Với tính di động nhị phân theo kiểu Java, công cụ tự động ( autoconf/ auto-make) và những thứ tương tự như cmakesẽ Không cần thiết. Và chúng tôi sẽ không có những thứ như một số hệ thống yêu cầu đưa vào <netinet/in.h>thay vì<arpa/inet.h> chontohl(3) . (Và có lẽ chúng tôi sẽ không có ntohl()hoặc bất kỳ công cụ đặt hàng byte nào khác ở vị trí đầu tiên!)


Tôi phát triển ngôn ngữ .NET thường xuyên, vì vậy tôi không biết chữ.

Biên dịch một lần, chạy mọi nơi là một trong những mục tiêu chính của .NET và Java, vì vậy thật công bằng khi nói rằng toàn bộ ngôn ngữ đã được phát minh trong nỗ lực giải quyết vấn đề này và kinh nghiệm phát triển của bạn là với một trong số chúng. Với .NET, nhị phân của bạn chạy trên môi trường thời gian chạy di động (CLR) . Java gọi môi trường thời gian chạy của nó là Máy ảo Java . Bạn chỉ cần phân phối một nhị phân sẽ hoạt động trên bất kỳ hệ thống nào (ít nhất là bất kỳ hệ thống nào có người đã triển khai JVM hoặc CLR). Dĩ nhiên, bạn vẫn có thể gặp các vấn đề về tính di động như, /so với \dấu phân cách đường dẫn hoặc cách in hoặc chi tiết bố cục GUI.

Rất nhiều phần mềm được viết bằng các ngôn ngữ được biên dịch đầy đủ thành mã gốc . Không có .nethoặc mã byte java, chỉ là mã máy riêng cho CPU mà nó sẽ chạy, được lưu trữ ở định dạng tệp thực thi không di động. C và C ++ là những ví dụ chính về điều này, đặc biệt là trong thế giới Unix. Rõ ràng điều này có nghĩa là một nhị phân phải được biên dịch cho một kiến ​​trúc CPU cụ thể.

Phiên bản thư viện là một vấn đề khác . Các thư viện có thể và thường xuyên giữ API cấp nguồn ổn định trong khi thay đổi ABI cấp nhị phân. (Xem Sự khác biệt giữa API và ABI .) Ví dụ: thêm một thành viên khác vào mờ structvẫn thay đổi kích thước của nó và yêu cầu biên dịch lại với các tiêu đề cho phiên bản thư viện mới cho bất kỳ mã nào phân bổ không gian cho cấu trúc như vậy, cho dù đó là động (malloc ), tĩnh (toàn cầu) hoặc tự động (cục bộ trên ngăn xếp).

Hệ điều hành cũng rất quan trọng . Một hương vị khác nhau của Unix cho kiến trúc CPU cùng có thể có định dạng tập tin nhị phân khác nhau, một ABI khác nhau cho thực hiện cuộc gọi hệ thống, và các giá trị số khác nhau cho các hằng số như fopen(3)'s O_RDONLY, O_APPEND,O_TRUNC .

Lưu ý rằng ngay cả một nhị phân được liên kết động vẫn có một số mã khởi động dành riêng cho hệ điều hành chạy trước đó main(). Trên Windows, đây là crt0. Unix và Linux có cùng một thứ, trong đó một số mã Khởi động C-Runtime được liên kết tĩnh thành mọi nhị phân. Tôi đoán trên lý thuyết bạn có thể thiết kế một hệ thống trong đó mã đó cũng được liên kết động và một phần của libc hoặc chính trình liên kết động, nhưng đây không phải là cách mọi thứ hoạt động trên thực tế trên bất kỳ HĐH nào tôi biết. Điều đó sẽ chỉ giải quyết vấn đề ABI gọi hệ thống, không phải là vấn đề về giá trị số cho các hằng số cho các hàm thư viện chuẩn. (Thông thường các cuộc gọi hệ thống được thực hiện thông qua các hàm bao bọc libc: Một nhị phân Linux x86-64 bình thường cho nguồn sử dụng mmap()sẽ không bao gồm syscallhướng dẫn, chỉ là mộtcall hướng dẫn cho chức năng bao bọc libc cùng tên.

Đây là một phần lý do tại sao bạn không thể chạy các nhị phân i386-FreeBSD trên i386-Linux. .


Nếu bạn muốn phân phối nhị phân, bạn cần tạo một tệp riêng cho mọi kết hợp CPU / OS-Hương vị + phiên bản / cài đặt-thư viện-phiên bản .

Quay trở lại thập niên 80/90, có nhiều loại CPU khác nhau được sử dụng chung cho các hệ thống Unix (MIPS, SPARC, POWER, PA-RISC, m68k, v.v.) và nhiều hương vị khác nhau của Unix (IRIX, SunOS, Solaris, AIX, HP-UX, BSD, v.v.).
Và đó chỉ là hệ thống Unix . Nhiều gói nguồn cũng sẽ biên dịch và hoạt động trên các hệ thống khác , như VAX / VMS, MacOS (m68k và PPC), Amiga, PC / MS-DOS, Atari ST, v.v.

Vẫn còn nhiều kiến ​​trúc CPU và HĐH, mặc dù hiện tại phần lớn máy tính để bàn là x86 chạy một trong ba HĐH chính.

Vì vậy, đã có nhiều kết hợp CPU / HĐH hơn mức bạn có thể bắt đầu, ngay cả trước khi bạn bắt đầu nghĩ về sự phụ thuộc vào các thư viện của bên thứ 3 có thể ở các phiên bản khác nhau trên các hệ thống khác nhau. (Bất cứ thứ gì không được nhà cung cấp hệ điều hành đóng gói sẽ phải được cài đặt bằng tay.)

Bất kỳ đường dẫn nào được biên dịch thành nhị phân cũng là hệ thống cụ thể. (Điều này giúp tiết kiệm RAM và thời gian so với việc đọc chúng từ tệp cấu hình khi khởi động). Các hệ thống Unix trường học cũ thường có rất nhiều thứ được tùy chỉnh bằng tay, vì vậy không có cách nào bạn có thể đưa ra bất kỳ giả định hợp lệ nào về những gì ở đâu.

Phân phối nhị phân là hoàn toàn không khả thi đối với Unix trường học cũ ngoại trừ các dự án thương mại lớn có thể đủ khả năng xây dựng và thử nghiệm trên tất cả các kết hợp chính .

Ngay cả làm nhị phân cho chỉ i386-linux-gnuamd64-linux-gnulà khó. Đã dành nhiều thời gian và công sức cho những thứ như Cơ sở Tiêu chuẩn Linux để biến các nhị phân di động thành có thể . Ngay cả các nhị phân liên kết tĩnh cũng không giải quyết mọi thứ. (ví dụ: chương trình xử lý văn bản nên in trên hệ thống RedHat so với hệ thống Debian như thế nào? ví dụ, vì biên dịch lại từ nguồn không giải quyết chúng.


Bên cạnh đó, ký ức trở lại trong ngày còn quý giá hơn bây giờ. Loại bỏ các tính năng tùy chọn tại thời gian biên dịch có thể tạo ra các nhị phân nhỏ hơn (kích thước mã ít hơn) cũng sử dụng ít bộ nhớ hơn cho cấu trúc dữ liệu của chúng. Nếu một tính năng yêu cầu một thành viên bổ sung trong mọi trường hợp của một số thứ nhất định classhoặc structđể theo dõi một thứ gì đó, việc vô hiệu hóa tính năng đó sẽ thu nhỏ đối tượng thêm 4 byte (chẳng hạn), thật tuyệt nếu đó là một đối tượng mà chương trình phân bổ 100k.

Các tính năng thời gian biên dịch tùy chọn ngày nay thường được sử dụng để làm cho các thư viện bổ sung tùy chọn. ví dụ như bạn có thể biên dịch ffmpegcó hoặc không có libx264, libx265, libvorbis, và nhiều thư viện khác cho cụ video / bộ mã hóa âm thanh, xử lý phụ đề, vv vv Thông thường hơn, rất nhiều thứ có thể được biên dịch có hoặc không libreadline: nếu nó có sẵn khi bạn chạy ./configure, các kết quả nhị phân sẽ phụ thuộc vào thư viện và cung cấp chỉnh sửa dòng ưa thích khi đọc từ thiết bị đầu cuối. Nếu không, thì chương trình sẽ sử dụng một số hỗ trợ dự phòng để chỉ đọc các dòng từ stdin với fgets()hoặc một cái gì đó.)

Một số dự án vẫn sử dụng các tính năng tùy chọn để loại bỏ mã không cần thiết vì lý do hiệu suất. ví dụ, nhân Linux có thể được xây dựng mà không cần hỗ trợ SMP (ví dụ: đối với hệ thống nhúng hoặc máy tính để bàn cổ), trong trường hợp đó, việc khóa rất đơn giản. Hoặc với nhiều tính năng tùy chọn khác ảnh hưởng đến một số mã lõi, không chỉ bỏ các trình điều khiển hoặc các tính năng phần cứng khác. (Mặc dù các tùy chọn cấu hình dành riêng cho phần cứng và dành riêng cho phần cứng chiếm rất nhiều tổng số mã nguồn. Xem Tại sao nhân Linux có hơn 15 triệu dòng mã? )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.