GNU yazılım geliştirme ekonomik olarak nasıl sürüyor?


10

Bu sorunun konunun dışında olup olmadığını özür dilerim, ama aynı zamanda bir ekonomi ve programlama sorusudur. Başka bir Güney Kıbrıs toplumuna gitmesi gerekiyorsa, lütfen belirtin.

Teorik olarak, GNU yazılımı tamamen boş zamanlarında gönüllüler tarafından veya gönüllü programcıları GNU yazılımı geliştirmek için (faaliyetlerinin başka bir kesiminden gelir kullanarak) geliştiren şirketler tarafından geliştirilir.

Birkaç yağmurlu haftasonunda tek bir kişi tarafından (örneğin bir sudoku oyunu) yapılabilecek küçük ölçekli proje için nasıl iyi çalışabileceğini anlıyorum, çünkü tüm bilgisayar programlamaları son derece eğlenceli ve ödüllendirici bir hobi, ve boş zamanlarında küçük veya orta ölçekli programlar geliştiren ve bunları dünyayla paylaşan insanları görmekte sorun yaşamıyorum.

Sorun, bunun aşağıdaki nedenlerle daha büyük programlar için son derece kötü ölçeklenmesidir:

  1. Programlama ne kadar eğlenceli olursa de, uygulanması gereken proje büyüdükçe, istenen işlevselliğin uygulanması için gereken süre çok hızlı büyür. Daha büyük ölçekli bir programın geliştirilmesi inanılmaz bir zaman alır, örneğin bir bireyin bir işletim sistemini programlaması için 15 yıllık boş zaman ve tatil süresi kolayca geçebilir ve yazılımı piyasaya sürüldüğünde tamamen eski olacak .
  2. Diğer insanlar programların başka bir şekilde yazdığı gibi, başkalarının kodlarını okumak ve anlamak çok zaman alır , çoğu durumda kendi kodunuzu sıfırdan yazmak kadar. GNU felsefesi tarafından teşvik edildiği gibi, başka bir kişinin kodunu değiştirmek ve geliştirmeye çalışmak, eklemek istediğiniz işlevsellik ile adı geçen programın kendi klonunu geliştirmek kadar zaman alıcıdır.
  3. 2 veya daha fazla kişi daha büyük bir program geliştirmek için işbirliği yapmak zorunda kalır etmez, bu tek bir geliştirici projesinde asla ortaya çıkmayacak birçok karar alma sorunu yaratır. Sonuç olarak, örneğin, 2 programcıdan oluşan bir grup, tek bir adamın yapması 10 yıl sürecek bir proje için işbirliği yaparsa, bunu 5 yıl içinde yapmayacak, muhtemelen 8'de yapacaklardır.
  4. Aynı proje için işbirliği yapan insanlar internette sadece buluşursa, projenin bir üyesinin aniden ortadan kaybolması kolaydır (ya ilgisini kaybettiği ya da artık fiziksel olarak internette olamayacağı için), Daha güçlü

Dolayısıyla, GNU zihniyetiyle basit programların nasıl geliştirilebileceğini mükemmel bir şekilde anlasam da, GNU / Linux veya gcc gibi dev programların bu modelde nasıl mümkün olduğunu kesinlikle göremiyorum. gcc yaklaşık 7 milyon kod satırıdır. Kod satırlarının çok fazla bir şey ifade etmediğini biliyorum, çünkü bir projenin daha sonraki bir aşamasında daha verimli programcı aslında kod satırlarını kaldıracak olan (projeyi basitleştirme ve / veya optimize etme), ancak bu ne kadar büyük bir proje gcc olduğunu.

Teoride, herkes boş zamanlarında gcc'yi serbestçe değiştirebilir, ancak pratikte? Çok profesyonel insanlar tarafından bir hobi olarak değil, bir iş olarak geliştirildi. Bir derleyiciyi hobi olarak yapan herkes, maliyet / fayda buna değmediği için sonunda vazgeçecektir:

  • Büyük bir program geliştirmek bu kadar uzun vadeli büyük bir projedir, boş zamanlarını kısa vadede daha ödüllendirici veya daha eğlenceli olan diğer aktiviteler için kullanmayı tercih ederler.
  • Yine de büyük bir program geliştirselerdi, bunu ücretsiz olarak yapmak yerine onlara ödeyecek bir şirket için yapmayı tercih ederlerdi

İnsanların uzun vadede GNU / Linux, gcc veya Open Office gibi bir program geliştirmeye ilgi duymasını sağlamak için ödüllendirici olmalıdır. Öyleyse sorum şu: Eğer bir maaş alamıyorlarsa, neden büyük GNU projesine katkıda bulunan insanlar var?


2, 3 ve 4. noktalara ilişkin kanıt sunabilir misiniz? En çok 2. maddeye katılmıyorum, ancak 3 ve 4 de açık kaynak yazılım geliştirirken gerçekten deneyimlemediğim ilginç bakış açıları. Zaman aldığımda kendi deneyimlerimi güncelleyeceğim
christopherlovell

Kuyu 2, büyük ölçüde programlama diline ve program mimarisinin belgelenmesine gösterilen çabaya bağlıdır. Kanıt gelince, bu , bu ve bu
Bregalad

@ Yorumunuzdaki iki örnek için Bregalad 9 yaşın üzerindedir. Açık kaynaklı yazılım, o zamandan beri, web'in evrimi ve git gibi iyi ve okunabilir kodları geliştirmeyi ve geliştirmeyi kolaylaştıran git gibi araçların popülerleştirilmesi ile uzun bir yol kat etti.
christopherlovell

1
@ SE / Programcılar'ın diğer örneğinde yer alan Begalad, neredeyse her yüksek oy alan cevap, daha fazla karmaşıklık için ikinci nedeninizi, yani okuma kodunun yazmaktan daha zor olmadığı anlamına gelir. Bu noktadaki son cümle, bir projeyi sıfırdan klonlamanın, ona eklemekten daha kolay olabileceğini, kodu bile okumadan, nasıl çalıştığını ve algoritmayı nasıl yeniden oluşturacağınızı bildiğinizi varsayar. Bir problem için zarif ve performanslı bir algoritma icat etmenin onu kodlamaktan çok daha zor bir görev olduğunu size söyleyebilirim :)
christopherlovell

Yanıtlar:


5

Bir programcı olmadığımı söyleyerek başlamak istiyorum ve hiçbir açık kaynak projesine hiç katkıda bulunmadım. Ancak, uzun süredir açık kaynakla ilgileniyorum ve açık kaynakların genel kavramlarını ve nasıl çalıştığını anladığımı düşünüyorum.

Başlangıç ​​olarak, açık kaynak kodunun yazılımdan para kazanamayacağınız anlamına gelmediğini söylemek isterim. Bu sadece kodun herkese açık olması gerektiği anlamına gelir. Red Hat ve Canonical gibi şirketler yazılımı satarak değil, uzmanlıklarını satarak para kazanıyor. Şirketimin bir Linux sunucusu çalıştırmasını istemezsem yazılımı ücretsiz olarak alabilirim. Ama onu kurmak, kurmak ve destek vermek için birine ihtiyacım var. Red Hat uzmanı devreye giriyor ve para kazanıyor. Şirket için mantıklı, çünkü kendi uzmanlarını işe almak muhtemelen daha pahalı olacaktır. Bu aynı zamanda bu şirketlere koda katkıda bulunmaları için bir teşvik vermektedir. Ürünlerinin iyi olmasını istiyorlar, böylece insanlar onu ve hizmetlerini kullanıyorlar.

Ancak ölçeklenebilirlik hakkındaki hususlarınız hakkında konuşalım.

  1. Açık kaynak hakkında harika olan şey, her şeyi sıfırdan geliştirmek zorunda kalmamanızdır. Ubuntu gibi bir işletim sistemi tek bir kişi tarafından oluşturulmamıştır. Bunun yerine birçok insan sistemin farklı bölümlerine katkıda bulundu (aslında tüm yetenekleri olan ve etkili bir işletim sistemi olan bir kişi bulmanın zor olacağını düşünüyorum). Örneğin, Ubuntu halkı Linux çekirdeğini geliştirmez. Sadece başkaları tarafından geliştirilen birini kullanırlar. Yani açık kaynak olmadan muhtemelen imkansız, şimdi mümkün, çünkü diğer insanların çalışmasını inşa edebilirsiniz.

  2. Başkalarını okumak ve anlamak, onu yazmaktan daha fazla zaman alıcı değildir. En azından pek çok durumda değil. Bunun ötesinde, kullandığınız tüm kodları anlamak zorunda değilsiniz. Linux için bir program yazmak istersem, o programdaki tüm parçaların nasıl çalıştığını anlamak zorunda değilim. Sadece ne yaptýklarýný bilmek zorundayým. Daha sonra bu parçaları alıp programımı oluşturmak için diğer parçalarla bir araya getirebilirim. Ya da mevcut bir programı alıp ihtiyaçlarım için değiştirebilirim.

  3. git ve github gibi araçlar işbirliği yapmayı inanılmaz derecede kolaylaştırır. Sadece kodu alıp değişiklikler yapabilirsiniz. Daha sonra bunları projeden sorumlu kişiye gönderirsiniz. Eğer iyiyse, kabul edilecektir.

  4. insanlar her zaman projelere girip çıkıyor. Ancak proje popülerse, yeterince çalışacaktır.

İşte açık kaynak kodunun çalışmasının bazı nedenleri.

  1. Açık kaynaklı yazılımın bu kadar iyi olmasının temel sebebinin, bir proje üzerinde çalışan çok sayıda insanın, küçük bir geliştirici ekibinde arşivlemem zor olan bir uzmanlık düzeyi sağlamasıdır. Garip görünse de, bu tek gerçek, açık kaynakta ortaya çıkabilecek tüm olumsuz sorunlardan daha ağır basmaktadır.

  2. Ticari programlamada proje firma ile birlikte ölür. Diyelim ki, bir şirketin yazılımları tarafından kapanıyor. Sonra berbat, güncellemeler ve hata düzeltmeleri almayacaksınız ve devam etmek için yeni bir yazılımla ihtiyacınız olacak. Açık kaynak ile sadece yazılımı desteklemek veya kendiniz geliştirmek için başka bir şirket bulabilirsiniz.

Hâlâ ilgileniyorsanız, Katedral ve Çarşı'yı okumanızı öneririm.


Söylediklerinize katılmıyorum, ama gerçekten, cevabı kabul edemiyorum, çünkü sorumu cevaplamıyor. Bana GNU'nun ne kadar büyük olduğuna ikna etmeye çalışıyorsun, ama faydası yok çünkü uzun zamandır ikna oldum. Ayrıca , bir başkasının kodunu değiştirmenin ve uyarlamanın ve bir yazılım projesinde çalışan birden fazla kişiyi koordine etmenin zorluklarını ciddi şekilde küçümsersiniz. Sorularımdaki sorunları abartmış olabilirim, ancak yine de önemli bir sorun olabilir. Hala büyük GNU yazılımının ekonomik olarak nasıl sürdüğünü bilmiyorum .
Bregalad

Belki bunu stackoverflow'a göndermeli ve bazı gerçek programcılardan bir cevap almalısınız. Size gerçek deneyime dayalı bir cevap verebilirler.
Rud Faden

1
Red Hat'la ilgili fikriniz duruyor, ancak iş tekliflerine hızlı bir şekilde baktıktan sonra, çoğu satış, pazarlama ve teknik destek ile ilgili ve sadece küçük bir yüzde gelişme açılıyor. (Bu, gelirlerinin nereden geldiği ve gelirlerinin nasıl dağıtıldığı konusunda iyi bir gösterge verir). Ayrıca, bu soru muhtemelen Yığın
Taşması'nda

@Bregalad Ama başka birinin kodunu değiştirseniz bile; bir şeylerin nasıl çalıştığını soracak bir topluluğunuz var. (Bu, özel yazılım geliştiricilerine veya hatta genel olarak iş dünyasına yabancı bir kavram olabilir, çünkü odak, bireye veya paraya odaklanmıştır ve yazılımın iyileştirilmesi değil ... tüm topluluk için). Ayrıca, topluluktaki insanlar da muhtemelen bir şey için kullandıkları için bu yazılımı çalışır durumda tutmakla ilgilenirler; aksi halde neden katkıda bulunuyorlar? (belki şöhret ... ama açık kaynak projeniz ölürse, bu nasıl yardımcı olur?)
leeand00

@Bregalad Ayrıca, projenin tek bir yazılım geliştirme şirketi başarısızlık noktası yerine birkaç şirkete (yazılımı kullanan ve aynı zamanda kodlayan şirketler) beslenmesi, Dönüşümleri Ayıklama ve verilerinizi başka bir sisteme yükleme olasılığınızın düşük olmasını sağlar başka bir şirket başarısız olduğunda veya piyasa tarafından yenildiğinde.
leeand00

2

Açık kaynaklı yazılım geliştirme çeşitli nedenlerle yapılır, ancak öncelikle hobi uzmanları tarafından veya profesyonel olarak ancak bir yan proje olarak yapılması yaygın bir yanlış anlamadır. Bu soruyu genel olarak açık kaynak kodları için cevaplıyorum, özellikle GNU lisanslı yazılımlar için değil. Ama cevabım kapsayıcı.

Diyelim ki ben bir yazılım geliştiricisiyim ve karmaşık bir yazılım projesi üzerinde çalışıyorum. İyi mimari, bir sorunu bağımsız parçalara ayırır ve geliştirme ilerledikçe, geliştiriciler genellikle ihtiyaç duydukları bir parçanın birçok sorun için ortak olan bir parça olduğunu kabul ederler. İşte bazı tipik yollar:

  1. Bu parçayı kendileri geliştirirler ve şirketin malı haline gelirler. Veya başka bir şirketten kapalı kaynaklı bir çözüm satın alırlar.
  2. Bu sorunu çözen açık kaynaklı bir proje buluyorlar ve bu mükemmel bir uyum ve lisans uygun. Sadece projelerine dahil ederler, lisansa ve nasıl kullanıldığına bağlı olarak açık kaynaklı olması gerekip gerekmeyebilir. Projeye geri dönmezler.
  3. Bu sorunu neredeyse çözen ancak kusurları veya eksiklikleri olan açık kaynaklı bir proje buluyorlar. Bunu geliştiriyorlar ve bu gelişmelere temel projeye geri dönebiliyorlar.
  4. Yeterli bir şey bulamıyorlar, bu yüzden kendi projelerini başlatıyorlar ve açık kaynak yapmaya karar veriyorlar.

2-4'ün avantajları, daha fazla insanın hem projenin tasarımına hem de koduna katkıda bulunması ve güçlü fikirlerin hayatta kaldığı (eğer varsa üreterek) ve zayıf olanların olmadığı bir ekosisteme girmesidir. Hata düzeltme ve özellik ekleme, topluluk çabaları haline gelir. 2. ve 3. senaryolarda, projeyi benimseyen geliştiriciler sağlam mühendislik prensiplerinden ve olgun kodlardan yararlanmaktadır. 3 ve 4 bağıntılıdır. Senaryo # 4'te, geliştiriciler diğer insanlar kodu kabul edip geliştirip geri verdiğinde fayda sağlar (# 3). Projeye katkıda bulunmanız avantajlıdır, böylece diğer düzeltmeler ve geliştirmeler bunların üzerinde yer aldıkça iyileştirmelerinizi güçlendirir, ki bunlardan yararlanmaya devam edersiniz. Deneyimlerime göre, tüm bu senaryolar yaygındır.

Mevcut yazılım projemde, yaklaşık 12 geliştiriciden biriyim ve yaklaşık iki yıldır bir sistem üzerinde çalışıyorum. Yaklaşık 5.000 açık kaynak projesini dahil ettik! Sadece birkaç yeni FOSS projesi ürettik ve belki de yarım düzine katkıda bulunduk. Bu durumda özellikle iyi vatandaşlar değiliz (diğer şirketler çok daha iyi), ancak bu size tüm bunların nasıl çalıştığının büyük bir ölçeğini gösteriyor. Küçük projelerde bile, açık kaynaklı katkılar düzinelerce veya yüzlerce olarak kolayca numaralanabilir. Herhangi bir açık kaynaklı yazılım kullanmasaydık, geliştirme maliyetleri 100-10.000 faktör kadar balonlanırdı.

Ölçeklenebilirlik, tasarımın modülerliği ve ayrıca kodun yeniden düzenlenmesi, çatallanması vb. Gibi en uygun hayatta kalma süreci sayesinde gerçekleşir. Hayatta kalma genellikle tescilli alternatiflerden daha iyidir, çünkü kod artık korunmasa bile, oradadır ve içinde değer bulan diğer insanlar kendi çatallarını koruyabilirler. Şirketler gelir ve gider ve çalışanlar işe alınır ve daha da hızlı çıkarlar. Kaynak koduna sahip olmadığınız veya bakımını yapmak için yalnızca küçük bir şirket ekibiniz olan bir yazılım bağımlılığı eklerseniz, önemli ölçüde risk altındasınız demektir. Linux çekirdeği, gcc, Android ve diğerleri gibi büyük projeler genellikle aktif olarak katkıda bulunan çok sayıda şirkete sahiptir.

İyi ve doğru kod yazmanın, okumaktan (çoğu durumda) daha kolay olduğu doğru değildir. Değişiklik yapsanız bile kullandığınız tüm yazılımları okumak zorunda değilsiniz. Bölümlere derinlemesine dalmanız ve çok okumalısınız, ama bütünü değil. Burada birim testler hakkında daha fazla şey söyleyebilirim, ama kısalık için bunu atlayacağım.

Açık kaynaklı yazılımların çoğu, boş zamanlarında insanlar tarafından geliştirilmez. Uygulama o kadar olağanüstü derecede faydalı ki, optimize edici bir pazar yeri olmadan çalışıyor. Ben şahsen piyasa odaklı bir yaklaşımın çok yardımcı olabileceğinden şüpheleniyorum, ancak bu yaklaşımın neye benzeyeceğini bilmiyorum. İnsanlar, itibarın para birimi olduğu bir pazar yeri olduğunu iddia ediyorlar, ancak bunun doğru bir model olduğunu düşünmüyorum. İşteki bir para birimi, yeni bir yazılımın benimsenmesi için gereken zamandır. Etkin, basit, iyi belgelere, vb. Sahip bir şey bulmak ve kullanmak istiyorsunuz. Böylece, bir müşteri gibi en az yatırım yapılan süre boyunca en kaliteli ürünü arıyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.