Tôi xin lỗi nếu câu hỏi này không có chủ đề, nhưng nó đồng thời là một câu hỏi kinh tế và lập trình. Nếu nó nên đi đến một cộng đồng SE khác, xin vui lòng cho tôi biết.
Về lý thuyết, phần mềm GNU hoàn toàn được phát triển bởi các tình nguyện viên trong thời gian rảnh hoặc bởi các công ty tự nguyện lập trình cho các lập trình viên để phát triển phần mềm GNU (bằng cách sử dụng thu nhập từ một lĩnh vực hoạt động khác của họ).
Tôi hiểu làm thế nào nó có thể hoạt động hoàn toàn tốt cho dự án quy mô nhỏ có thể được thực hiện trong một vài ngày cuối tuần mưa của một cá nhân (ví dụ như trò chơi sudoku), bởi vì sau tất cả lập trình máy tính là một sở thích cực kỳ thú vị và bổ ích, và tôi không gặp vấn đề gì khi thấy mọi người phát triển các chương trình vừa hoặc nhỏ trong thời gian rảnh và chia sẻ chúng với thế giới.
Vấn đề là quy mô này cực kỳ kém đối với các chương trình lớn hơn vì những lý do sau:
- Điều thú vị như lập trình là, khi dự án phải được thực hiện trở nên lớn hơn, thời gian cần thiết để thực hiện các chức năng mong muốn tăng lên cực kỳ nhanh chóng. Một chương trình quy mô lớn hơn cần một lượng thời gian đáng kinh ngạc để phát triển, ví dụ, có thể dễ dàng mất 15 năm thời gian rảnh và thời gian nghỉ để một cá nhân lập trình một hệ điều hành, và khi phần mềm của anh ta được phát hành, nó sẽ hoàn toàn lỗi thời .
- Vì những người khác viết chương trình theo cách khác mà bạn đã làm, việc đọc và hiểu mã của người khác mất rất nhiều thời gian, trong hầu hết các trường hợp cũng như viết mã của riêng bạn từ đầu. Sửa đổi mã của người khác và cố gắng cải thiện nó, vì nó được khuyến khích bởi triết lý GNU, gần như tốn thời gian như việc phát triển bản sao chương trình đã nói của bạn với chức năng bạn muốn thêm.
- Ngay sau khi 2 người trở lên sẽ phải hợp tác để phát triển một chương trình lớn hơn, điều này tạo ra rất nhiều vấn đề ra quyết định sẽ không bao giờ phát sinh trong một dự án phát triển đơn lẻ. Kết quả là, ví dụ, nếu một nhóm gồm 2 lập trình viên hợp tác cho một dự án sẽ mất 10 năm để một người đàn ông thực hiện, họ sẽ không thực hiện trong 5 năm nhưng có lẽ là 8.
- Nếu những người cộng tác cho cùng một dự án chỉ gặp nhau trên internet, thì một thành viên của dự án sẽ dễ dàng biến mất (vì anh ta mất hứng thú hoặc vì anh ta không thể truy cập internet được nữa), do đó, thậm chí còn hợp tác khó hơn
Vì vậy, trong khi tôi hiểu hoàn toàn các chương trình đơn giản có thể được phát triển với tư duy GNU, tôi hoàn toàn không thấy các chương trình lớn như GNU / Linux hay gcc có thể thực hiện được như thế nào trên mô hình này. gcc là khoảng 7 triệu dòng mã. Tôi biết các dòng mã không có ý nghĩa gì nhiều, vì trong giai đoạn sau của dự án, lập trình viên năng suất cao hơn là người thực sự sẽ loại bỏ các dòng mã (đơn giản hóa và / hoặc tối ưu hóa dự án), nhưng điều này mang lại cho một số lượng lớn một gcc dự án là.
Vậy theo lý thuyết, ai cũng có thể tự do sửa đổi gcc trong thời gian rảnh, nhưng trong thực tế? Nó được phát triển bởi những người rất chuyên nghiệp như một công việc, không phải là một sở thích. Bất cứ ai làm trình biên dịch như một sở thích cuối cùng sẽ từ bỏ vì chi phí / lợi ích không đáng là bao:
- Phát triển một chương trình lớn là một dự án lớn dài hạn như vậy, họ muốn sử dụng thời gian rảnh của mình để có các hoạt động khác bổ ích hơn hoặc thú vị hơn trong ngắn hạn
- Nếu họ muốn phát triển một chương trình lớn, họ muốn làm điều đó cho một công ty sẽ trả tiền cho họ hơn là làm miễn phí
Để thu hút mọi người quan tâm đến việc phát triển một chương trình như GNU / Linux, gcc hoặc Open Office trong thời gian dài, nó cần phải có phần thưởng. Vì vậy, câu hỏi của tôi là: Tại sao có người đóng góp cho dự án GNU lớn, nếu họ không nhận được tiền lương cho nó?