Tại sao FreeBSD không tán thành GCC ủng hộ Clang / LLVM?


241

Vì vậy, tôi đã lướt mạng và tình cờ thấy bài viết này . Về cơ bản, tuyên bố rằng FreeBSD , bắt đầu từ Phiên bản 10 trở lên sẽ không dùng GCC để ủng hộ Clang / LLVM .

Từ những gì tôi thấy trên mạng cho đến nay, Clang / LLVM là một dự án khá tham vọng, nhưng về độ tin cậy thì nó không thể sánh được với GCC .

Có bất kỳ lý do kỹ thuật nào FreeBSD đang chọn LLVM làm cơ sở hạ tầng trình biên dịch của họ không, hoặc toàn bộ vấn đề sẽ sôi sục với giấy phép GNU / GPL vĩnh cửu so với giấy phép BSD?

Câu hỏi này có (bằng cách nào đó) thông tin liên quan về việc sử dụng GCC trong FreeBSD

Câu trả lời:


361

Tóm tắt: Lý do chính để chuyển từ GCC sang Clang là sự không tương thích của giấy phép GPL v3 của GCC với các mục tiêu của dự án FreeBSD . Ngoài ra còn có các vấn đề chính trị để làm với đầu tư của công ty, cũng như các yêu cầu cơ sở người dùng. Cuối cùng, có những lợi thế kỹ thuật dự kiến ​​sẽ làm với việc tuân thủ tiêu chuẩn và dễ gỡ lỗi. Những cải tiến hiệu suất trong thế giới thực trong việc biên dịch và thực thi là đặc thù mã và gây tranh cãi; trường hợp có thể được thực hiện cho cả hai trình biên dịch.

FreeBSD và GPL: FreeBSD có mối quan hệ không thoải mái với GPL. Những người ủng hộ giấy phép BSD tin rằng phần mềm thực sự miễn phí không có hạn chế sử dụng . Những người ủng hộ GPL tin rằng các hạn chế là cần thiết để bảo vệ quyền tự do phần mềm và cụ thể là khả năng tạo phần mềm không miễn phí từ phần mềm miễn phí là một hình thức quyền lực bất công hơn là tự do. Dự án FreeBSD, nếu có thể, cố gắng tránh sử dụng GPL :

Do sự phức tạp bổ sung có thể phát triển trong việc sử dụng phần mềm GPL thương mại, tuy nhiên, chúng tôi nỗ lực thay thế phần mềm đó bằng các bài nộp theo giấy phép FreeBSD thoải mái hơn bất cứ khi nào có thể.

FreeBSD và GPL v3: Các GPL v3 cấm một cách rõ ràng cái gọi là Tivoisation mã, một lỗ hổng trong v2 GPL mà kích hoạt hạn chế phần cứng để không cho phép sửa đổi phần mềm khác của pháp luật bởi người sử dụng. Đóng lỗ hổng này là một bước không thể chấp nhận được đối với nhiều người trong cộng đồng FreeBSD:

Các nhà cung cấp thiết bị đặc biệt mất nhiều nhất nếu phần lớn phần mềm hiện được cấp phép theo GPLv2 ngày nay chuyển sang giấy phép mới. Họ sẽ không còn tự do sử dụng phần mềm GPLv3 và hạn chế sửa đổi phần mềm được cài đặt trên phần cứng của họ ... Tóm lại, có một lượng lớn người tiêu dùng OpenSource đột nhiên rất quan tâm đến việc tìm hiểu các lựa chọn thay thế cho phần mềm được cấp phép GPL.

Do GCC chuyển sang GPL v3, FreeBSD đã buộc phải tiếp tục sử dụng GCC 4.2.1 (GPL v2), được phát hành trở lại vào năm 2007 , và hiện đã lỗi thời. Việc FreeBSD không chuyển sang sử dụng các phiên bản GCC hiện đại hơn, ngay cả với các vấn đề bảo trì bổ sung khi chạy trình biên dịch cũ và sửa lỗi backport, đưa ra một số ý tưởng về sức mạnh của yêu cầu để tránh GPL v3. Trình biên dịch C là thành phần chính của cơ sở FreeBSD và " một trong những mục tiêu (dự kiến) cho FreeBSD 10 là hệ thống cơ sở không có GPL ".

Đầu tư của công ty: Giống như nhiều dự án nguồn mở lớn, FreeBSD nhận được tài trợcông việc phát triển từ các tập đoàn. Mặc dù phạm vi mà FreeBSD được Apple tài trợ hoặc phát triển không dễ dàng phát hiện ra, nhưng có sự chồng chéo đáng kể vì Hệ điều hành Darwin của Apple sử dụng mã hạt nhân có nguồn gốc BSD đáng kể . Ngoài ra, bản thân Clang ban đầu là một dự án nội bộ của Apple, trước khi được mở nguồn vào năm 2007 . Vì các nguồn lực của công ty là một yếu tố quyết định chính của dự án FreeBSD, đáp ứng nhu cầu của nhà tài trợ có lẽ là một động lực đáng kể trong thế giới thực .

Cơ sở người dùng: FreeBSD là một tùy chọn nguồn mở hấp dẫn đối với nhiều công ty, vì việc cấp phép rất đơn giản, không hạn chế và không có khả năng dẫn đến các vụ kiện. Với sự xuất hiện của GPL v3 và các điều khoản chống Tivoisation mới , có ý kiến ​​cho rằng có một xu hướng tăng tốc, do nhà cung cấp hướng tới các giấy phép dễ dãi hơn . Do lợi thế nhận thức của FreeBSD đối với các thực thể thương mại nằm ở giấy phép cho phép, nên ngày càng có áp lực từ cơ sở người dùng doanh nghiệp phải rời khỏi GCC và GPL nói chung.

Các vấn đề với GCC: Ngoài giấy phép, sử dụng GCC còn có một số vấn đề về nhận thức . GCC là không đầy đủ các tiêu chuẩn tuân thủ, và có nhiều phần mở rộng không được tìm thấy trong tiêu chuẩn ISO C . Với hơn 3 triệu dòng mã, đây cũng là " một trong những dự án phần mềm nguồn mở và phức tạp nhất ". Sự phức tạp này làm cho sửa đổi mã mức phân phối là một nhiệm vụ đầy thách thức.

Ưu điểm kỹ thuật: Clang có một số lợi thế kỹ thuật so với GCC . Đáng chú ý nhất là các thông báo lỗi nhiều thông tin hơnAPI được thiết kế rõ ràng cho các IDE, tái cấu trúc và các công cụ phân tích mã nguồn. Mặc dù trang web Clang trình bày các sơ đồ biểu thị việc sử dụng bộ nhớ và biên dịch hiệu quả hơn nhiều, kết quả trong thế giới thực khá thay đổi và phù hợp với hiệu suất của GCC. Nói chung, các nhị phân do Clang sản xuất chạy chậm hơn các nhị phân GCC tương đương:

Mặc dù sử dụng LLVM nhanh hơn trong việc xây dựng mã so với GCC ... trong hầu hết các trường hợp, các nhị phân được xây dựng GCC 4.5 đã hoạt động tốt hơn LLVM-GCC hoặc Clang ... trong các thử nghiệm còn lại, hiệu suất gần với GCC hoặc tốt phía sau. Trong một số thử nghiệm, hiệu suất của các nhị phân được tạo ra Clang chỉ đơn giản là khủng khiếp.

Kết luận: Rất khó có khả năng hiệu quả biên dịch sẽ là một động lực đáng kể để mạo hiểm đáng kể khi chuyển một dự án lớn như FreeBSD sang một công cụ biên dịch hoàn toàn mới, đặc biệt là khi thiếu hiệu suất nhị phân. Tuy nhiên, tình hình không thực sự có thể sử dụng được. Đưa ra lựa chọn giữa 1) chạy GCC lỗi thời, 2) Chuyển sang GCC hiện đại và buộc phải sử dụng giấy phép không phù hợp với mục tiêu của dự án hoặc 3) chuyển sang trình biên dịch được cấp phép BSD ổn định, quyết định có lẽ là không thể tránh khỏi. Hãy nhớ rằng điều này chỉ áp dụng cho hệ thống cơ sở và hỗ trợ từ phân phối; không có gì ngăn người dùng cài đặt và sử dụng GCC hiện đại trên hộp FreeBSD của họ.


4
Điểm chuẩn bạn đã trích dẫn là từ một phiên bản cũ của Clang. Các điểm chuẩn cho các phiên bản gần đây dường như là các phiên bản gần đây gần hơn. Nghiên cứu của riêng tôi cho các chương trình đơn giản giúp Clang 3.0 nhanh hơn vài phần trăm so với GCC 4.6, nhưng GCC nhanh hơn 20% trên phiên bản luồng. phoronix.com/scan.php?page=news_item&px=MTA5Nzc là một điểm chuẩn Phoronix mới hơn.
Sean

6
"GCC không tuân thủ đầy đủ tiêu chuẩn": Không thể sử dụng các trình chuyển đổi trình biên dịch để thực thi tuân thủ theo một tiêu chuẩn nhất định?
Giorgio

4
Trước hết, đừng đọc quá nhiều vào điểm chuẩn Phoronix, hay đúng hơn là đừng đọc chúng. Thứ hai, đúng là GCC không tuân thủ đầy đủ các tiêu chuẩn theo mặc định trừ khi bạn chỉ định rõ ràng một tiêu chuẩn, nếu bạn không sử dụng các tiện ích mở rộng GNU, nhưng điều này có vẻ như là một lý do kỳ lạ để sử dụng Clang, mặc dù vậy, vì họ cũng đang triển khai các phần mở rộng GNU được sử dụng phổ biến nhất vì họ cố gắng để Clang có thể sử dụng được như một sự thay thế cho GCC.
kyrias

1
@Giorgio: Không. Xem gcc.gnu.org/c99status.html để biết ví dụ - và đó chỉ là C99 (hiện tại nó đã 14 tuổi). Ngoài ra gcc.gnu.org/onlinesocs/libstdc++/manual/status.html - clang có hỗ trợ tốt hơn cho cả hai (tôi nghĩ rằng nó đầy đủ - và nếu không, nó chắc chắn tốt hơn ít nhất).
Tim Čas

4
@Demizey Tôi không bảo vệ Phoronix, nhưng nếu bạn định loại bỏ thứ gì đó thì ít nhất bạn nên cung cấp một lý do hợp lệ.
Mario

38

Một điều đáng xem xét là FreeBSD hiện đang sử dụng GCC 4.2.1 như được ghi chú trong câu trả lời của ire_and_curses, do đó, so sánh hiệu suất không phải là 4.5 hoặc thậm chí 4.6 không thực sự phù hợp với dự án. Do đó, những câu hỏi bạn nên đặt ra là:

  1. Mức tăng hiệu suất của Clang mới so với GCC cũ mà dự án sử dụng là gì?

  2. Làm thế nào để các nhị phân tương tự được biên dịch trong GCC 4.2.1 so với Clang mới?

Do GCC chuyển sang GPL v3, FreeBSD đã buộc phải tiếp tục sử dụng GCC 4.2.1 (GPL v2), được phát hành trở lại vào năm 2007, và hiện đã lỗi thời.

Nếu Clang tụt lại phía sau GCC hiện tại nhưng vẫn còn nhiều năm trước GCC được triển khai trong dự án thì quyết định phát triển của họ được bảo đảm và truyền cảm hứng thực sự.


19

Mặc dù GCC là GPLv3, các nhị phân kết quả do GCC tạo ra không bao giờ có bất kỳ ràng buộc giấy phép nào. Rõ ràng, bạn có thể sử dụng GCC để xây dựng phần mềm theo giấy phép bạn muốn. Ngay cả thư viện C đi kèm với GCC và được bao gồm trong nhị phân cũng không có giấy phép. http://www.gnu.org/licenses/gcc-exception-faq.html

Phần 2 của GNU GPLv3:

Bạn có quyền tuyên truyền một tác phẩm của Mã mục tiêu được hình thành bằng cách kết hợp Thư viện thời gian chạy với các Mô-đun độc lập, ngay cả khi việc truyền bá đó có vi phạm các điều khoản của GPLv3, với điều kiện là tất cả Mã mục tiêu được tạo bởi Quy trình biên dịch hợp lệ. Sau đó, bạn có thể truyền đạt sự kết hợp như vậy theo các điều khoản bạn chọn , phù hợp với việc cấp phép cho các Mô-đun Độc lập.

Ngay lập tức, có nghĩa là phần tổng hợp không liên quan đến cả phần mềm không tương thích GCC và GPL. Đó không phải là một hạn chế: Phần mềm được cấp phép BSD có thể được sử dụng trong quá trình xây dựng liên quan đến GNU GCC.

Như bạn có thể thấy, trái với những gì đã nói ở trên, không có lý do nào liên quan đến giấy phép THỰC SỰ để rời khỏi GCC vì không có sự không tương thích với việc sử dụng GCC trong FreeBSD.

Lý do thực sự đằng sau sự thay đổi này là chính trị và cơ hội:

  • BSD có giấy phép riêng cạnh tranh về mặt triết học với giấy phép GNU Public (như * ire_and_curses * đã giải thích ở trên),
  • CLANG là trình biên dịch không phải GPL mới được khởi xướng bởi một nhà tài trợ FreeBSD có vẻ tương đương về mặt kỹ thuật với GCC được cấp phép GPL (như được mô tả ở trên bởi * ire_and_curses *).

Những sự thật này tạo cơ hội cho FreeBSD rời khỏi GCC và loại bỏ nó: họ không thực sự bị ép buộc về mặt pháp lý, vì họ vẫn có thể sử dụng GCC để xây dựng phần mềm miễn phí hoặc được cấp phép BSD, nhưng họ muốn bám vào Triết lý "tất cả phần mềm được cấp phép BSD".


5
Xin lỗi tôi đã phải bỏ phiếu này xuống. Thật không may, sự không quen thuộc của bạn với BSD và các chương trình thấp phần mềm. Đối với hồ sơ, đó là quyết định chính trị không mang tính kỹ thuật dẫn đến việc các BSD chuyển từ Trình biên dịch C di động (PCC) truyền thống sang GCC vào đầu những năm 1990. Clang là dự án của Apple! Là một người sử dụng GCC trên cơ sở hàng ngày để sống trên OpenBSD, người đang cố gắng quay trở lại PCC, bạn đã sai trong tất cả các tài khoản.
Predrag Punosevac

5
Đây không phải là về các nhị phân kết quả, mà là về việc gcc là một phần của FreeBSD - do đó, các ràng buộc về giấy phép là vấn đề.
sstn

3
Nếu tôn giáo của dự án nói "Không có GPLv3" thì các khía cạnh kỹ thuật sẽ biến mất - chỉ cần tưởng tượng rằng họ đang sử dụng một trình biên dịch Microsoft.
Thorbjørn Ravn Andersen

3
Đây là câu trả lời duy nhất chỉ ra chính xác rằng license of compiler != license of end product. Khiếu nại về giấy phép của trình biên dịch có thể không liên quan trừ khi người dùng không hiểu giấy phép.
Brandin

6
Đây không phải là về việc các nhị phân được tạo ra có thuộc GPLv3 hay không, đó là liệu các thay đổi đối với chính trình biên dịch có yêu cầu tuân thủ GPLv3 hay không. Các nhà cung cấp phần cứng thường sửa đổi trình biên dịch chứng khoán để làm việc với phần cứng của họ tốt hơn hoặc tận dụng phần cứng theo cách độc quyền. Loại bỏ rủi ro rằng các thay đổi tùy chỉnh của bạn phải tuân thủ GPLv3 hoặc hành động pháp lý rủi ro là một vấn đề lớn đối với các tổ chức đó. Nó thực sự là giấy phép của trình biên dịch quan trọng ở đây.
David Harks

7

Tôi không phải là chuyên gia, nhưng hiểu biết của tôi là Clang / LLVM sử dụng ít tài nguyên hơn GCC và nhanh hơn.

http://clang.llvm.org/features.html#performance

Nếu bạn đang điều hành một môi trường mà bạn cần xây dựng nhiều thứ, rất nhiều lần, hiệu suất đó có thể biến thành tiết kiệm thực sự về chi phí năng lượng và thời gian. Nếu nó là thật.


Nhỏ .. và có các công cụ để giảm thời gian biên dịch lặp đi lặp lại - ccache.samba.org Đừng bận tâm đến khả năng biên dịch song song (xem distcc), thời gian liên kết có xu hướng khó giải quyết hơn trong các dự án lớn
Rob11311

Vâng, rất tốt, nhưng mã nhị phân kết quả chậm hơn; p
rustyx

1
@rustyx không so với gcc 4.2!
Tuyến Miles
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.