Tüm işletim sistemleri için evrensel olarak çapraz platform C ++ kodu yazmanın ve ürünleri göndermenin bu kadar kolay olmadığını nasıl açıklayabilirim?


15

Şirketimiz, Windows için bir dizi masaüstü ürünü gönderiyor ve birçok Linux kullanıcısı, forumlarda ürünlerimizin yıllarca Linux sürümleri yazmamız gerektiğinden şikayet ediyor ve bunu yapmamamızın nedeni

  • biz açgözlü bir şirketiz
  • tüm teknik uzmanlarımız yetersiz nitelikte aptallardır

Ortalama ürünümüz 3 milyon satırlık C ++ koduna benzer.

Benim ve meslektaşlarımın analizi şu şekildedir:

  • platformlar arası C ++ kodu yazmak o kadar kolay değil
  • çok sayıda dağıtım paketi hazırlamak ve bunları tüm yaygın Linux sürümleri için korumak zaman alır
  • tahminimiz, Linux pazarının tüm kullanıcıların% 5-15'i gibi bir şey olduğu ve bu kullanıcıların çabalarımız için ödeme yapmak istemeyeceği yönündedir.

bu gündeme geldiğinde cevap yine açgözlü niteliksiz aptallar olduğumuz ve her şey doğru yapıldığında tüm bunların kolay ve acısız olmasıdır.

Platformlar arası kod yazmanın ve çok sayıda dağıtım paketini korumanın çok fazla çaba gerektirdiği gerçeğine ilişkin değerlendirmelerimiz ne kadar makul? Şüphenin gölgesinin ötesinde tam olarak ne kadar çaba harcadığını gösteren gerçek yaşam öyküleri ile kolay ama ayrıntılı analizleri nerede bulabiliriz?


3
Neden WINE'ı hedeflemiyor ve yapıldığını beyan etmiyorsunuz?
btilly

1
@btilly: Şimdiden ŞARAP üzerinde çalışıyor, ancak ŞARAP doğru değil .
Sharptooth

2
ŞARAP birçok durumda bir acıdır ve uygulamanıza bağlı olarak, genellikle yerel bir uygulama kadar performans veya hoş değildir. Linux gibi geniş bir dünyada güzel görünen yerel bir Linux uygulaması oluşturmak kendi başına bir görevdir.
Matthew Scharley

4
Sanırım "linux kullanıcıları ödemek istemiyor" yanlış bir varsayım. Son kullanıcılar için muhtemelen telif hakkıyla daha fazla ilgileniyorlar ve diğerlerinin yaptığı gibi Windows'un korsan bir kopyasını kullanmıyorlar.
ziggystar

3
Kıskananlar çatlasın. Forumlarda sızlananlara verilen tek cevap ya (a) onları görmezden gelmek, ya da (b) onlara doğru yürümek ve yüzüne kare olarak bağlamaktır. (a) genellikle çok daha pratiktir.
Tom Anderson

Yanıtlar:


8

İnsanların çoğunun çalışan olduğunu ve bu nedenle kâr elde etmeyi önemsemeleri gereken bir dünyada yaşamadıklarını unutmayın. İşyerinde ortaya çıkarlar, işlerini yaparlar ve eve giderler, asla tüm sürecin nasıl çalıştığını düşünmezler. Ve çok zeki olsa da, birçok teknoloji iş hakkında olumlu bir şekilde cahil ve genellikle dogma tarafından kör.

Elbette haklısınız, bu ölçeğin x-platform yazılımını yapmak basit bir şey değil. Özellikle onlarca geliştirici ve milyonlarca kullanıcısı olan bir şirket olmadığında. Ve bu sadece teknik sınırlamalar değil. Maliyet ve fayda hakkında her şey. Evet, olabilir (eğer, zaten ŞARAP içinde runable olmak not olarak, rağmen) Linux uygulamayı taşıma gelecek yıl sonra geçirirler. Tabii ki, geliştirme zamanı o yıl ücretsiz gelmez. Ve sonunda, belki sizi netleştirecek% 5-15 oranında ek kullanıcı (tahmininize göre). Ya da aynı parayı / çabayı gösterebilir ve yeni bir sürüm olarak Windows geliştirmenize odaklayabilir veya tümünü pazarlamaya sokabilir ve kullanıcı tabanınıza% 50 ekleyebilirsiniz. Hangisi akıllı seçim gibi geliyor? (Açıkçası numaraların şirketinize göre özelleştirilmesi gerekir ve nihai sonuç, taşımayı destekleyebilir).

Bunun 'gerçek inananları' ikna etmeye yardımcı olup olmayacağını bilmiyorum, ama bu akıllı iş hamlesi. Akıllı iş hamleleri yapmazsanız, işiniz kalmaz. Ve sonra kesinlikle bir Linux sürümü olmayacak.


16

Burada dikkate alınması gereken iki şey var:

Birincisi, bir bakıma haklılar. Başından beri planladıysanız çapraz platform C ++ yazmak o kadar da zor değil . Bu kesinlikle gördüğünüz problem. Çoğu açık kaynaklı uygulama (bir Linux kullanıcısının ortalama bir günde dokunduğu çoğu uygulama) saçma bir platformdur. Ortalama Linux kullanıcısının günlük olarak etkileşimde bulunduğu C veya C ++ ile yazılmış ve yalnızca Windows ve Linux'ta değil, aynı zamanda x86, x86-64, ARM, SPARC, Bunun nedeni, kısmen kaşıntı yapan kaşıntılı kişilerin kodlarını sistemlerinde çalışacak şekilde bağlamalarıdır, ancak aynı zamanda konvansiyonun platformlar arası taşınabilirliği planlamasıdır.

İkincisi, pazar düşündüğünüzden daha uygun olabilir. Linux'taki insanların yazılım için ödeme yapmak istemedikleri konusunda büyük bir yanılgı var. Doğru olabilecek bazı insanlar için, ama Linux'u kullanan birçok insan var (çoğu, sanırım) çünkü onlar için daha iyi çalışıyor ve fiyat nedeniyle değil, tercih ediyorlar. Ayrıca, şirketiniz öncelikle profesyonel bir ortamda kullanılan bir ürün üretiyorsa, şirketler Linux sistemlerinde çalışacak yazılım için ödeme yapmaya alışkındır.

Ambalaj hakkında yaptığınız noktaya gelince, diğerlerinin söylediği gibi, gerçekten büyük dağıtımların en son sürümü için paketler üretmeniz gerekiyor. Aslında paketleri yapmak o kadar da zor değil ve büyük dağıtımların çoğu debian paketleri (debian, ubuntu vb.) Veya RPM'leri (fedora, suse, centos, mandrake) kullanıyor, bu yüzden bazı komut dosyalarını değiştirmek çok küçük bir taban çizgisi .deb ve bir taban çizgisi .rpm'den birden fazla paket üretmek ve diğer herkes için ikili ve bir benioku içeren bir tarball atmak, insanlar nasıl kurulacağını anlayacaklar. Alternatif olarak, tüm ambalajları atlayabilir ve kurulumu yapmak için bash veya perl komut dosyası ile tek bir tarball yayınlayabilirsiniz.

Forumunuzdaki kullanıcılara nasıl şikayet edeceklerine gelince, Joe Internet'in söylediği gibi, bunlar ne olursa olsun şikayet edecek insanların yüzdesi olabilir, ancak yapacağım ilk şey, çapraz platform desteği göz önünde bulundurularak tasarlanmamış büyük miktarda eski kod. İkincisi, dürüstçe bir Linux portu yapmak için finansal destek yapıp yapmayacağını görün ve bunun sonuçlarına açık olun. Son olarak, bir liman finansal olarak uygun değilse, programın WINE ile iyi çalışmasını sağlamak için biraz çalışma yapmaya bakın. WINE ilk çözüm olmamalı, ancak uygulamanızı Linux'ta kullanmak isteyenleri iyi bir şekilde ortadan kaldırabilir ve tam bir bağlantı noktasından daha ucuz bir proje olabilir. Aslında, WINE kod tabanına projenin bir parçası olarak kod eklerseniz, sadece kendinizi yeni bir pazara açamazsınız,


Gerçek platformlar arası dağıtım ağrısını en aza indirerek cevabınızın gerçekten yanlış olduğuna inanıyorum - özellikle ticari ürününüzü bu platformlarda test etme probleminden hiç bahsetmediniz . Ayrıca, birden fazla platformu desteklemenin maliyetinden de bahsetmediniz .
davidbak

10

Adobe, sen misin?

Cidden, Linux sürümlerini önceden sipariş edebilmeleri için bir nevi ödül getirin. Zamanında koymaya değer bir liman yapmak için yeterli sipariş alırsanız, aksi takdirde bunları iade edin ve artık değerli hale getirmeye yetecek kadar insan olmadığını kanıtlayın.

Yine de bir şey taşındıysanız, sadece en son Ubuntu LTS sürümünü, RHEL, SLED'i hedefleyin ve belki bir tar.gz insanlar başka bir şey kullanmak istiyorlarsa çalışmaya başlayabilirler. Bu sizi endişelendirmek için 3 paket bırakır ve başka biri muhtemelen tar.gz sürümünü almak için yeterli biliyor.


Birçok şirket yalnızca ikili dosyaları dağıtmak ister, bu nedenle .tar.gz yöntemi muhtemelen dışarıdadır.
David Thornley

4
@David Thornley: Bir tarball olması, kaynak paket olması gerektiği anlamına gelmiyor. İlgili ikili dosyaları, belgeleri ve bir README dosyasını bir tarball'a paketleyebilir ve ardından ikili dosyaları ve kütüphaneleri gitmeleri gereken yere kurmaları ve uygulamanın çalışması için herhangi bir sistem yapılandırması yapmaları için kullanıcıya bırakabilirler.
Cercerilla

5

platformlar arası C ++ kodu yazmak o kadar kolay değil

Aksine. Platformlar arası çalışmayı planladığınızda ve kullandığınız platforma özel API'ler için soyutlamalar sağladığınızda, kodunuzun büyük çoğunluğu zaten platformlar arasıdır. Zaten Boost veya Qt veya NSPR gibi popüler bir kütüphane kullanıyorsanız, çalışan bir platformlar arası derleme yapmaya zaten çok yakınsınız.

Geliştirme döngüsünün sonlarında bir bağlantı noktası yapılırken en sık karşılaşılan sorun, programın doğrudan kullanması gerekmeyen ve muhtemelen hiç kullanmaması gereken bölümlerinde platforma özgü API'lere dayanan önemli kod bölümlerinin olmasıdır. (İyi bir tasarımın güçlü bir şekilde ayrıştırılmış modülleri olacaktır ve sınıf grupları, istendiğinde yeniden yazılan değiştirmelerle değiştirilebilir. Belirli bir modül için durum böyle değilse, güçlü bir kod kokusudur.)

Kolay çıkış yolu genellikle bir "Yardımcı Program" sınıfı yazmak ve platforma özgü tüm şeyleri oraya atmaktır. "Kolay ve ağrısız" değil, düşündüğünüzden kesinlikle daha az zor.

çok sayıda dağıtım paketi hazırlamak ve bunları tüm yaygın Linux sürümleri için korumak zaman alır

Bu talihsiz bir yanlış anlamadır. Birden çok platform için derlemeleri sürdürmenin ek çaba gerektirdiği doğru olsa da (özel bir günlük derleme sunucusu kurmada ve belirli bir dağıtım için nasıl paketleneceğini öğrenirken), bunları bir çok dağıtım [ ]." Aksine. Ubuntu, Fedora ve tek bir LSB uyumlu tarball gibi küçük bir avuç dolusu pakete ihtiyacınız vardır ve çeşitli Linux toplulukları işin geri kalanını üstlenecektir. Özellikle yazılımınız popülerse, NASILTO'lar her kurulum için gerekli kurulum talimatlarını vererek yayılacaktır. Veya yazılımınız serbestçe dağıtılabiliyorsa ( ücretsiz bir ürün olmasa bile yapabilirsiniz), lisanslamanızın izin vermesi şartıyla), daha popüler dağıtımlarda yazılımınızın bir tür alternatif depo taşıyan kopyaları olacaktır.

Topluluklar genellikle bu konuda çok iyidir ve deneyimli kullanıcılar, izin verirseniz, bu ayak işlerinin çoğunu isteyerek yapacaklardır .

tahminimiz, Linux pazarının tüm kullanıcıların% 5-15'i gibi bir şey olduğu ve bu kullanıcıların çabalarımız için ödeme yapmak istemeyeceği yönündedir.

Başka bir talihsiz ve çok yanlış yanılgı.

Linux kullanıcılarının işletim sistemlerini ücretsiz almaları, yazılım için ödeme yapmak istemedikleri anlamına gelmez. Yazılım çok iyiyse ve geniş bir talep varsa, Linux kullanıcıları paralarıyla Windows kullanıcılarından daha fazla ayrılmaya istekli olacaklardır. Linux kullanıcılarının ortalama olarak kullanıcı başına Windows kullanıcılarına göre iki katından fazla ödediği Humble Indie Bundles'a bakın .

Ayrıca, arenada ne tür mevcut yazılımların bulunduğuna bağlı olarak, ürününüzün Linux kullanıcıları arasında diğer platformlardan (ürününüzü bilmeden bilemeyeceğimiz) daha fazla talebe sahip olması da mümkündür. Farkında olduğunuzdan daha büyük bir potansiyel pazara sahip olabilirsiniz.


4

Böyle tutumlarla onları görmezden gelirdim. X'in herhangi bir şey olabileceği X segmentine benziyorlar , bu ne yaparsanız yapın şikayet edecektir. Bir Linux sürümü yayınlayın ya da yayınlamayın, bu sizin seçiminiz değil, sizin seçiminiz.


1

Nvidia için çalışıyorsanız ...

Tanrı sevgisi için, onu emmek ve zaten bazı iyi sürücüler yaz.

Aksi takdirde, düzenli iş uygulamaları yapıyorsanız, gelecekteki projeleri C # üzerinde çalışacak şekilde hedefleyin.

Mono, .NET 3.5'e kadar tamamen uyumludur ve winforms GUI'yi bile kullanabilir. Dikkat etmeniz gereken tek modüller OS'ye özel modüllerdir, ancak bunlar arasında çok az bulunur.

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.