Saya minta maaf jika pertanyaan ini di luar topik, tetapi secara bersamaan merupakan pertanyaan ekonomi dan pemrograman. Jika harus pergi ke komunitas SE lain, harap tunjukkan saya.
Secara teori, perangkat lunak GNU sepenuhnya dikembangkan oleh sukarelawan selama waktu luang mereka, atau oleh perusahaan yang secara sukarela mendanai pemrogram untuk mengembangkan perangkat lunak GNU (dengan menggunakan pendapatan dari sektor lain dari aktivitas mereka).
Saya mengerti bagaimana itu bisa bekerja dengan baik untuk proyek skala kecil yang dapat dilakukan dalam beberapa akhir pekan hujan oleh satu orang (katakanlah misalnya permainan sudoku), karena bagaimanapun pemrograman komputer adalah hobi yang sangat menyenangkan dan bermanfaat, dan saya tidak punya masalah melihat orang mengembangkan program kecil atau menengah selama waktu luang mereka dan membagikannya kepada dunia.
Masalahnya adalah skala ini sangat buruk untuk program yang lebih besar karena alasan berikut:
- Sama menyenangkannya dengan pemrograman, karena proyek yang harus diimplementasikan menjadi lebih besar, waktu yang diperlukan untuk mengimplementasikan fungsionalitas yang diinginkan tumbuh sangat cepat. Program berskala lebih besar membutuhkan waktu yang luar biasa untuk berkembang, misalnya dengan mudah bisa memakan waktu 15 tahun dan waktu liburan bagi seseorang untuk memprogram sistem operasi, dan pada saat perangkat lunaknya dirilis, ia akan sepenuhnya usang .
- Ketika orang lain menulis program dengan cara lain seperti cara Anda melakukannya, membaca dan memahami kode orang lain membutuhkan banyak waktu, dalam banyak kasus, sama seperti menulis kode Anda sendiri dari awal. Mengubah kode orang lain dan mencoba memperbaikinya, seperti yang didorong oleh filosofi GNU, hampir sama memakan waktu dengan mengembangkan klon Anda sendiri dari program tersebut dengan fungsi yang ingin Anda tambahkan.
- Segera setelah 2 orang atau lebih harus berkolaborasi untuk mengembangkan program yang lebih besar, ini menciptakan banyak masalah pengambilan keputusan yang tidak akan pernah muncul pada proyek pengembang tunggal. Hasilnya adalah, misalnya jika sekelompok 2 programmer berkolaborasi untuk sebuah proyek yang akan memakan waktu 10 tahun untuk seorang pria lajang, mereka tidak akan berhasil dalam 5 tahun tetapi mungkin dalam 8.
- Jika orang-orang yang berkolaborasi untuk proyek yang sama bertemu di internet semata-mata, mudah bagi salah satu anggota proyek untuk menghilang secara tiba-tiba (baik karena dia kehilangan minat atau karena dia secara fisik tidak dapat berada di internet lagi), sehingga membuat kolaborasi bahkan lebih baik lagi. lebih sulit
Jadi, sementara saya mengerti betul bagaimana program sederhana dapat dikembangkan dengan pola pikir GNU, saya sama sekali tidak melihat bagaimana program besar seperti GNU / Linux atau gcc dimungkinkan pada model ini. gcc adalah sekitar 7 juta baris kode. Saya tahu baris kode tidak banyak berarti, karena pada tahap selanjutnya dari proyek, programmer yang lebih produktif adalah yang benar-benar akan menghapus baris kode (menyederhanakan dan / atau mengoptimalkan proyek), tetapi ini memberikan informasi seberapa besar proyek gcc adalah.
Jadi secara teori, siapa pun dapat dengan bebas memodifikasi gcc selama waktu luang mereka, tetapi dalam praktik? Ini dikembangkan oleh orang-orang yang sangat profesional sebagai pekerjaan, bukan sebagai hobi. Siapa pun yang membuat kompiler sebagai hobi pada akhirnya akan menyerah karena biaya / manfaatnya tidak sepadan:
- Mengembangkan program besar adalah proyek besar jangka panjang, mereka lebih suka menggunakan waktu luang mereka untuk melakukan kegiatan lain yang lebih bermanfaat atau lebih menyenangkan dalam jangka pendek
- Jika mereka ingin mengembangkan program besar, mereka lebih suka melakukannya untuk perusahaan yang akan membayar mereka daripada melakukannya secara gratis
Untuk membuat orang tertarik untuk mengembangkan program seperti GNU / Linux, gcc atau Open Office dalam jangka panjang, itu harus bermanfaat. Jadi pertanyaan saya adalah: Mengapa ada orang yang berkontribusi pada proyek GNU besar, jika mereka tidak mendapatkan gaji untuk itu?
sumber
Jawaban:
Saya ingin memulai dengan mengatakan bahwa saya bukan seorang programmer dan saya tidak pernah berkontribusi pada proyek open source. Namun, saya telah lama tertarik pada open source dan saya percaya bahwa saya memahami konsep umum open source dan cara kerjanya.
Sebagai permulaan, saya ingin mengatakan bahwa open source tidak berarti Anda tidak dapat menghasilkan uang dari perangkat lunak. Ini hanya berarti bahwa kode harus tersedia untuk umum. Perusahaan seperti Red Hat dan Canonical menghasilkan uang bukan dengan menjual perangkat lunak, tetapi dengan menjual keahlian mereka. Jika saya tidak ingin perusahaan saya menjalankan server Linux, saya bisa mendapatkan perangkat lunaknya secara gratis. Tetapi saya membutuhkan seseorang untuk menginstalnya, mengaturnya dan memberikan dukungan. Di sinilah spesialis dari misalnya Red Hat masuk dan menghasilkan uang. Bagi perusahaan itu masuk akal, karena mempekerjakan spesialis mereka sendiri mungkin akan jauh lebih mahal. Ini juga memberi perusahaan-perusahaan ini insentif untuk berkontribusi dalam kode. Mereka ingin produk mereka bagus sehingga orang akan menggunakannya dan oleh layanan mereka.
Tapi mari kita bicara tentang poin Anda tentang skalabilitas.
Yang keren tentang open source adalah Anda tidak perlu mengembangkan semuanya dari awal. Sistem operasi seperti Ubuntu belum dibangun oleh satu orang. Sebaliknya banyak orang yang berkontribusi pada berbagai bagian sistem (sebenarnya saya pikir akan sulit untuk menemukan satu orang dengan semua keterampilan untuk membuat dan sistem operasi yang efektif). Sebagai contoh, orang-orang Ubuntu tidak mengembangkan kernel Linux. Mereka hanya menggunakan satu yang dikembangkan oleh orang lain. Jadi apa yang tadinya tanpa open source mungkin tidak mungkin, sekarang mungkin, karena Anda dapat membangun pekerjaan orang lain.
Membaca dan memahami kode orang lain itu tidak lebih memakan waktu daripada menulis sendiri. Paling tidak dalam banyak kasus. Selain itu, Anda tidak harus memahami semua kode yang Anda gunakan. Jika saya ingin menulis sebuah program untuk Linux, saya tidak harus mengerti bagaimana semua bagian dalam program itu bekerja secara detail. Saya hanya harus tahu apa yang mereka lakukan. Saya kemudian dapat mengambil bagian-bagian ini dan menyatukannya dengan bagian-bagian lain untuk membuat program saya. Atau saya dapat mengambil program yang ada dan memodifikasinya untuk kebutuhan saya.
alat seperti git dan github membuatnya sangat mudah untuk dikolaborasikan. Anda hanya mendapatkan kode dan melakukan modifikasi. Anda kemudian menyerahkannya kepada orang yang bertanggung jawab atas proyek tersebut. Jika itu baik, itu akan diterima.
orang masuk dan keluar dari proyek sepanjang waktu. Tetapi jika proyek itu populer, cukup banyak yang akan mengerjakannya.
Berikut adalah beberapa alasan mengapa open source bekerja.
Saya pikir alasan utama mengapa perangkat lunak open source menjadi begitu baik adalah karena sejumlah besar orang yang bekerja pada suatu proyek, mengasuransikan tingkat keahlian yang sulit saya arsipkan dalam tim kecil pengembang. Meskipun mungkin tampak aneh, fakta tunggal ini, tampaknya lebih penting daripada semua masalah negatif yang dapat muncul dalam sumber terbuka.
Dalam pemrograman komersial, proyek mati bersama perusahaan. Katakanlah Anda oleh beberapa perangkat lunak dari perusahaan yang kemudian ditutup. Kemudian Anda gagal, karena Anda tidak akan menerima pembaruan dan perbaikan bug, dan Anda harus menggunakan perangkat lunak baru untuk mengikutinya. Dengan open source, Anda dapat mencari perusahaan lain untuk mendukung perangkat lunak Anda atau mengembangkannya sendiri.
Jika Anda masih tertarik, saya sarankan Anda membaca The Cathedral and the Bazaar
sumber
Pengembangan perangkat lunak open-source dilakukan untuk beragam alasan, tetapi itu adalah kesalahpahaman umum bahwa itu dilakukan terutama oleh penghobi atau profesional tetapi sebagai proyek sampingan. Saya menjawab pertanyaan ini untuk open-source secara umum, bukan perangkat lunak berlisensi GNU pada khususnya. Tetapi jawaban saya inklusif.
Katakanlah saya adalah pengembang perangkat lunak (saya), dan saya sedang mengerjakan proyek perangkat lunak yang kompleks (saya). Arsitektur yang baik memecah masalah menjadi beberapa bagian yang independen, dan seiring perkembangan yang terjadi, pengembang akan sering menyadari bahwa sebagian yang mereka butuhkan adalah yang umum untuk banyak masalah. Berikut adalah beberapa jalur khusus ke depan:
Keuntungan 2-4 adalah bahwa lebih banyak orang akhirnya berkontribusi pada desain dan kode proyek, dan itu masuk ke dalam semacam ekosistem di mana ide-ide kuat bertahan (melalui prokreasi jika Anda mau) dan yang lemah tidak. Perbaikan bug dan penambahan fitur menjadi upaya komunitas. Dalam skenario # 2 dan 3, pengembang mengadopsi manfaat proyek dari prinsip-prinsip teknik suara dan kode matang. 3 dan 4 berkorelasi. Dalam skenario # 4, pengembang mendapat manfaat ketika orang lain mengadopsi dan meningkatkan kode dan memberikan kembali (# 3). Sangat menguntungkan untuk berkontribusi kembali ke proyek sehingga peningkatan Anda disemen karena perbaikan dan perbaikan lainnya berjalan di atasnya, yang Anda terus mendapat manfaatnya. Dalam pengalaman saya, semua skenario ini adalah hal biasa.
Pada proyek perangkat lunak saya saat ini, saya salah satu dari sekitar 12 pengembang dan telah bekerja pada sistem selama sekitar dua tahun. Kami telah memasukkan sekitar 5.000 proyek sumber terbuka! Kami telah menelurkan hanya beberapa proyek FOSS baru, dan berkontribusi kembali mungkin setengah lusin. Kami bukan warga negara yang baik dalam hal ini (perusahaan lain jauh lebih baik), tetapi ini menunjukkan kepada Anda skala bagaimana semua ini bekerja. Bahkan pada proyek-proyek kecil, kontribusi dari open-source dapat dengan mudah berjumlah puluhan atau ratusan. Jika kami tidak menggunakan perangkat lunak sumber terbuka apa pun, biaya pengembangan akan membengkak dengan faktor 100-10.000.
Skalabilitas terjadi karena modularitas desain dan juga melalui proses survival-of-the-fittest semacam ini di mana kode dapat direaktorasikan, bercabang, dan sebagainya. Survivability biasanya lebih baik daripada alternatif berpemilik karena meskipun kode tersebut tidak lagi dipertahankan, itu di luar sana dan orang lain yang menemukan nilai di dalamnya dapat mempertahankan garpu mereka sendiri. Perusahaan datang dan pergi dan karyawan dipekerjakan dan keluar lebih cepat. Jika Anda menambahkan ketergantungan perangkat lunak yang Anda tidak memiliki kode sumbernya atau hanya memiliki sedikit tim internal untuk dipelihara, Anda telah menanggung risiko besar. Proyek-proyek besar seperti kernel Linux, gcc, Android, dan lainnya sering memiliki banyak perusahaan yang berkontribusi secara aktif.
Tidak benar bahwa lebih mudah menulis kode yang baik dan benar daripada membacanya (dalam banyak kasus). Anda juga tidak harus membaca semua perangkat lunak yang Anda gunakan bahkan jika Anda membuat modifikasi. Anda harus menyelam jauh ke dalam bagian-bagian itu dan banyak membaca, tetapi tidak keseluruhan. Saya bisa mengatakan lebih banyak di sini tentang unit test, tetapi akan menghilangkannya untuk singkatnya.
Sebagian besar perangkat lunak open-source tidak dikembangkan oleh orang-orang di waktu luang mereka. Praktik ini sangat bermanfaat secara fenomenal sehingga bekerja tanpa pasar yang optimal. Saya pribadi curiga beberapa jenis pendekatan yang didorong pasar akan sangat membantu, tetapi saya tidak tahu seperti apa pendekatan itu. Orang-orang berpendapat bahwa ada pasar di mana reputasi adalah mata uang, tetapi saya tidak berpikir itu model yang akurat. Satu mata uang di tempat kerja adalah waktu yang diperlukan untuk mengadopsi perangkat lunak baru. Anda ingin mencari dan menggunakan sesuatu yang aktif, sederhana, memiliki dokumentasi yang baik, dll. Jadi, seperti pembelanja, Anda sedang mencari produk berkualitas terbaik dengan waktu investasi paling sedikit.
sumber