Bagaimana pengembangan perangkat lunak GNU bertahan secara ekonomis?

10

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:

  1. 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 .
  2. 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.
  3. 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.
  4. 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?

Bregalad
sumber
Bisakah Anda memberikan beberapa bukti untuk poin 2, 3 dan 4? Saya paling tidak setuju dengan poin 2, tetapi 3 dan 4 juga merupakan sudut pandang menarik yang belum pernah saya alami ketika mengembangkan perangkat lunak open source. Saya akan memperbarui dengan pengalaman saya sendiri ketika saya punya waktu
christopherlovell
Yah 2 sangat bergantung pada bahasa pemrograman, dan upaya dimasukkan ke dalam dokumentasi arsitektur program. Adapun buktinya, saya dapat menemukan ini , ini dan ini
Bregalad
@Bregalad dua contoh Anda dalam komentar Anda berusia lebih dari 9 tahun. Perangkat lunak open source telah berkembang sejak saat itu, diaktifkan oleh evolusi web dan popularisasi alat-alat seperti git yang membuat berbagi dan mengembangkan kode yang baik dan mudah dibaca menjadi jauh lebih mudah.
christopherlovell
1
@Bregalad dalam contoh Anda yang lain dari SE / Programmer, hampir setiap jawaban yang diperingkat tinggi membantah alasan kedua Anda untuk kompleksitas yang lebih besar, yaitu bahwa membaca kode tidak selalu lebih sulit daripada menulisnya. Kalimat terakhir di bawah poin ini, bahwa kloning proyek dari awal mungkin lebih mudah daripada menambahkannya, mengasumsikan bahwa Anda tahu, bahkan tanpa membaca kode, cara kerjanya dan cara membuat ulang algoritma. Saya dapat memberi tahu Anda dari pengalaman bahwa menemukan algoritma yang elegan dan berkinerja untuk suatu masalah adalah tugas yang jauh lebih sulit daripada mengkodekannya :)
christopherlovell

Jawaban:

5

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. 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.

  2. 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

Rud Faden
sumber
Saya tidak setuju dengan apa yang Anda katakan, tetapi sungguh, saya tidak dapat menerima jawabannya, karena itu tidak menjawab pertanyaan saya. Anda sepertinya mencoba meyakinkan saya betapa hebatnya GNU, tetapi tidak ada gunanya karena saya sudah yakin sejak lama. Anda juga secara serius meremehkan kesulitan memodifikasi dan mengadaptasi kode orang lain, serta mengkoordinasikan banyak orang yang bekerja pada proyek perangkat lunak. Saya mungkin telah melebih-lebihkan masalah dalam pertanyaan saya, tapi tetap saja, itu bisa menjadi masalah besar. Saya masih tidak tahu bagaimana perangkat lunak GNU yang besar bertahan secara ekonomis.
Bregalad
Mungkin Anda harus mempostingnya di stackoverflow dan mendapatkan jawaban dari beberapa programmer nyata. Mereka dapat memberikan jawaban yang benar berdasarkan pengalaman nyata.
Rud Faden
1
Maksud Anda tentang Red Hat berdiri, tetapi setelah melihat sekilas proposal pekerjaan mereka, kebanyakan dari mereka terkait dengan penjualan, pemasaran dan dukungan teknis, dan hanya sebagian kecil yang membuka pengembangan. (Ini memberikan indikasi yang baik dari mana penghasilan mereka berasal dan bagaimana pendapatan mereka didistribusikan). Selain itu, pertanyaan ini mungkin akan ditandai di luar topik di Stack Overflow (meskipun saya harus membaca kembali bantuan untuk memastikan)
Bregalad
@Bregalad Tetapi bahkan jika Anda memodifikasi kode orang lain; Anda memiliki komunitas untuk menarik, untuk bertanya kepada mereka bagaimana sesuatu bekerja. (Ini mungkin konsep asing bagi pengembang perangkat lunak berpemilik atau bahkan bisnis pada umumnya, karena fokusnya ada pada individu atau uang, dan bukan perbaikan perangkat lunak ... untuk seluruh komunitas). Selain itu, orang-orang di komunitas juga memiliki minat untuk menjaga agar perangkat lunak itu berjalan karena mereka juga kemungkinan menggunakannya untuk sesuatu sendiri; kalau tidak, mengapa mereka berkontribusi? (mungkin terkenal ... tetapi jika proyek open source Anda mati, bagaimana itu bisa membantu?)
leeand00
@Bregalad Juga, kelanjutan proyek pada beberapa perusahaan (perusahaan yang menggunakan dan juga kode perangkat lunak) daripada kegagalan perusahaan pengembangan perangkat lunak tunggal memastikan bahwa Anda cenderung harus Ekstrak Transform dan Muat data Anda ke sistem lain ketika beberapa perusahaan lain gagal atau dimakan oleh pasar.
leeand00
2

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:

  1. Mereka mengembangkan karya itu sendiri dan itu menjadi milik perusahaan. Atau mereka membeli solusi sumber tertutup dari perusahaan lain.
  2. Mereka menemukan proyek open-source yang menyelesaikan masalah ini dan sangat cocok dan lisensi sesuai. Mereka hanya memasukkannya ke dalam proyek mereka, yang mungkin atau mungkin tidak perlu bersumber terbuka tergantung pada lisensi dan bagaimana menggunakannya. Mereka tidak berkontribusi kembali ke proyek.
  3. Mereka menemukan proyek open-source yang hampir menyelesaikan masalah ini tetapi memiliki cacat atau kekurangan. Mereka meningkatkannya dan mereka dapat berkontribusi perbaikan itu kembali ke proyek dasar.
  4. Mereka tidak menemukan apa pun yang mereka sukai, sehingga mereka memulai proyek mereka sendiri dan memutuskan untuk membuka-sumbernya.

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.

pengguna149485
sumber