Bagaimana menjelaskan bahwa menulis secara universal lintas-platform kode C ++ dan pengiriman produk untuk semua OS tidak semudah itu?

15

Perusahaan kami mengirimkan serangkaian produk desktop untuk Windows dan banyak pengguna Linux mengeluh di forum bahwa kami seharusnya menulis versi produk kami untuk Linux bertahun-tahun yang lalu dan alasan mengapa kami tidak melakukannya adalah

  • kami adalah perusahaan yang rakus
  • semua spesialis teknis kami adalah orang bodoh yang tidak memenuhi syarat

Produk rata-rata kami adalah sekitar 3 juta baris kode C ++.

Analisis saya dan kolega saya adalah sebagai berikut:

  • menulis kode C ++ lintas platform tidak semudah itu
  • menyiapkan banyak paket distribusi dan memeliharanya untuk semua versi Linux yang luas membutuhkan waktu
  • perkiraan kami adalah pasar Linux kira-kira 5-15% dari semua pengguna dan para pengguna itu mungkin tidak mau membayar untuk usaha kami

ketika hal ini muncul, jawabannya adalah lagi bahwa kita adalah orang-orang idiot yang kurang memenuhi syarat dan bahwa ketika semuanya dilakukan dengan benar semua ini mudah dan tidak menyakitkan.

Seberapa beralasankah evaluasi kami terhadap fakta bahwa menulis kode lintas-platform dan mempertahankan berbagai paket ditribusi membutuhkan banyak upaya? Di mana kita dapat menemukan beberapa analisis yang mudah namun terperinci dengan kisah-kisah kehidupan nyata yang menunjukkan di balik bayang-bayang keraguan berapa banyak upaya yang dibutuhkan sebenarnya?

sharptooth
sumber
3
Mengapa tidak menargetkan WINE dan menyatakan itu dilakukan?
btilly
1
@ btilly: Ini sudah berfungsi pada WINE, tetapi WINE tidak benar , Anda tahu.
sharptooth
2
WINE sangat merepotkan dalam banyak kasus, dan tergantung pada aplikasi Anda, biasanya tidak sebagus pemain atau cantik seperti aplikasi asli. Membuat aplikasi Linux asli yang terlihat cantik di seluruh dunia yang luas itu adalah tugas Linux itu sendiri.
Matthew Scharley
4
Saya pikir "pengguna linux tidak mau membayar" adalah asumsi yang salah. Untuk pengguna akhir, mereka mungkin lebih peduli tentang hak cipta dan tidak hanya menggunakan salinan Windows bajakan seperti banyak orang lain.
ziggystar
3
Pembenci akan selalu membenci. Satu-satunya respons terhadap pengeluh di forum adalah (a) mengabaikannya, atau (b) berjalan menghampiri mereka dan membesar-besarkannya di muka. (a) biasanya jauh lebih praktis.
Tom Anderson

Jawaban:

8

Ingatlah bahwa sebagian besar orang adalah karyawan, dan karenanya tidak hidup di dunia di mana mereka perlu peduli untuk mendapat untung. Mereka muncul di tempat kerja, melakukan pekerjaan mereka, dan pulang, tidak pernah benar-benar memikirkan bagaimana seluruh proses bekerja. Dan walaupun sangat cerdas, banyak teknisi yang secara positif tidak tahu tentang bisnis, dan sering dibutakan oleh dogma.

Anda benar, tentu saja, membuat perangkat lunak x-platform dengan skala seperti itu bukanlah hal yang sederhana. Terutama ketika Anda bukan perusahaan yang memiliki banyak pengembang dan jutaan pengguna. Dan itu bukan hanya keterbatasan teknis. Semuanya tentang biaya vs manfaat. Ya, Anda bisa menghabiskan tahun depan porting aplikasi ke Linux (meskipun, seperti yang Anda perhatikan, itu sudah dapat dijalankan di WINE). Tentu saja, tahun pengembangan itu tidak gratis. Dan pada akhirnya, akan bersih Anda mungkintambahan 5-15% pengguna (berdasarkan estimasi Anda). Atau Anda dapat mengambil uang / upaya yang sama, dan memfokuskannya pada pengembangan Windows Anda sebagai versi baru, atau memasukkan semuanya ke dalam pemasaran, dan menambahkan 50% ke basis pengguna Anda. Yang mana yang terdengar seperti pilihan cerdas? (jelas angka-angka tersebut perlu disesuaikan dengan perusahaan Anda, dan hasil akhirnya mungkin mendukung pengangkutan).

Saya tidak tahu apakah itu akan membantu meyakinkan 'orang percaya sejati', tetapi ini adalah langkah bisnis yang cerdas. Dan jika Anda tidak membuat langkah bisnis yang cerdas, Anda keluar dari bisnis. Dan kemudian pasti tidak akan ada versi Linux.

GrandmasterB
sumber
16

Ada dua hal yang perlu dipertimbangkan di sini:

Yang pertama adalah bahwa mereka benar. Menulis lintas platform C ++ tidak terlalu sulit jika Anda merencanakannya sejak awal . Ini hampir pasti masalah yang Anda lihat. Sebagian besar aplikasi open source (sebagian besar aplikasi yang disentuh pengguna Linux pada hari-hari biasa), tidak masuk akal lintas platform. Pikirkan tentang jumlah aplikasi yang rata-rata berinteraksi dengan pengguna Linux setiap hari yang ditulis dalam C atau C ++ dan dijalankan tidak hanya pada Windows dan Linux, tetapi juga MacOS, BSD, Solaris, dll. Pada x86, x86-64, ARM, SPARC, dll. Ini sebagian karena orang-orang dengan gatal untuk menggaruk port kode untuk berjalan pada sistem mereka, tetapi juga karena itu konvensi adalah untuk merencanakan portabilitas lintas platform.

Yang kedua adalah, pasar mungkin lebih layak daripada yang Anda pikirkan. Ada kesalahpahaman besar bahwa orang-orang di Linux tidak mau membayar untuk perangkat lunak. Bagi sebagian orang itu mungkin benar, tetapi ada banyak orang (kebanyakan, saya pikir) yang menggunakan Linux karena berfungsi lebih baik untuk mereka dan mereka lebih suka, bukan karena harga. Juga, jika perusahaan Anda menghasilkan produk yang digunakan terutama dalam pengaturan profesional, perusahaan terbiasa membayar untuk perangkat lunak untuk berjalan pada sistem Linux.

Adapun poin yang Anda buat tentang kemasan, seperti yang orang lain katakan, Anda benar-benar hanya perlu menghasilkan paket untuk versi terbaru dari distribusi utama. Sebenarnya membuat paket tidak terlalu sulit, dan sebagian besar distribusi utama menggunakan paket debian (debian, ubuntu, dll.) Atau RPM (fedora, suse, centos, mandrake), jadi sangat kecil untuk memodifikasi beberapa skrip untuk menghasilkan beberapa paket dari .deb dan .rpm dasar, dan untuk semua orang hanya melempar tarball dengan binari dan readme, orang akan mencari cara untuk menginstalnya. Atau, Anda dapat melewati semua kemasan, dan hanya mengirim tarball tunggal dengan skrip bash atau perl untuk melakukan instalasi.

Adapun cara menangani pengguna di forum Anda mengeluh, seperti kata Joe Internet, mereka mungkin hanya persentase orang yang akan mengeluh, apa pun yang terjadi, tetapi hal pertama yang saya lakukan adalah mencoba menjelaskan bahwa Anda memiliki kode legacy dalam jumlah besar yang tidak dirancang dengan dukungan lintas platform. Kedua, jujur ​​lihat apakah itu akan membuat dukungan keuangan untuk membuat port Linux, dan terbuka dengan hasilnya. Akhirnya, jika suatu port tidak layak secara finansial, lihat tentang melakukan beberapa pekerjaan untuk membuat program bekerja dengan baik dengan WINE. WINE seharusnya tidak menjadi solusi pertama, tetapi mungkin meredakan orang-orang yang hanya ingin menggunakan aplikasi Anda di Linux, dan menjadi proyek yang lebih murah daripada port penuh. Bahkan, jika Anda menambahkan kode ke basis kode WINE sebagai bagian dari proyek, maka Anda tidak hanya dapat membuka diri ke pasar baru,

Cercerilla
sumber
Saya percaya jawaban Anda sebenarnya salah dengan meminimalkan rasa sakit dari pengiriman lintas platform yang benar - terutama karena Anda sama sekali tidak menyebutkan masalah pengujian produk komersial Anda pada platform ini. Anda juga tidak menyebutkan biaya untuk mendukung banyak platform.
davidbak
10

Adobe, apakah itu kamu?

Serius meskipun, memasang semacam karunia sehingga mereka dapat memesan di muka versi Linux. Jika Anda mendapatkan pesanan yang cukup untuk membuat pelabuhan sepadan dengan waktu, jika tidak, kembalikan mereka dan Anda sekarang memiliki bukti tidak cukup banyak orang yang peduli untuk membuatnya berharga.

Jika Anda mendapatkan sesuatu yang porting, hanya menargetkan rilis Ubuntu LTS terbaru, RHEL, SLED, dan mungkin memberikan tar.gz orang dapat mencoba untuk bekerja jika mereka ingin menggunakan sesuatu yang lain. Itu membuat Anda dengan 3 paket untuk dikhawatirkan dan orang lain mungkin cukup tahu untuk mendapatkan versi tar.gz.

Travis Watkins
sumber
Banyak perusahaan hanya ingin mendistribusikan binari, jadi metode .tar.gz kemungkinan keluar.
David Thornley
4
@ David Thornley: Hanya karena itu tarball tidak berarti harus menjadi paket sumber. Mereka dapat mengemas binari yang relevan, dokumentasi, dan file README menjadi tarball, dan kemudian menyerahkannya kepada pengguna untuk menginstal binari dan perpustakaan ke mana mereka harus pergi, dan melakukan konfigurasi sistem apa pun untuk membuat aplikasi berfungsi.
Cercerilla
5

menulis kode C ++ lintas platform tidak semudah itu

Justru sebaliknya. Ketika Anda merencanakan untuk kerja lintas platform, dan memberikan abstraksi untuk API khusus platform yang Anda gunakan, sebagian besar kode Anda sudah lintas platform. Jika Anda sudah menggunakan perpustakaan populer seperti Boost atau Qt atau NSPR, Anda sudah sangat dekat dengan membangun lintas platform.

Masalah yang paling umum dialami ketika melakukan port di akhir siklus pengembangan adalah bahwa ada bagian-bagian signifikan dari kode yang bergantung pada API khusus platform di bagian-bagian program yang tidak perlu menggunakannya secara langsung dan mungkin tidak boleh sama sekali. (Desain yang bagus akan memiliki modul yang sangat terpisah, dan kelompok kelas dapat diganti dengan penggantian yang ditulis ulang sesuka hati. Jika ini bukan kasus untuk modul yang diberikan, itu adalah bau kode yang kuat.)

Jalan keluar yang mudah adalah dengan menulis kelas "Utilitas" dan melemparkan semua hal khusus platform Anda di sana. Ini tidak "mudah dan tidak menyakitkan," tetapi tentu saja tidak sesulit yang Anda kira.

menyiapkan banyak paket distribusi dan memeliharanya untuk semua versi Linux yang luas membutuhkan waktu

Ini adalah kesalahpahaman yang disayangkan. Memang benar bahwa mempertahankan build untuk berbagai platform membutuhkan upaya tambahan (dalam menyiapkan server build harian yang khusus dan mempelajari cara mengemas paket untuk distribusi tertentu), tidak benar bahwa Anda perlu mempertahankannya untuk "banyak distribusi [s ]. " Justru sebaliknya. Anda hanya perlu memelihara segelintir paket - katakanlah, mungkin, Ubuntu, Fedora, dan satu tarball yang kompatibel dengan LSB - dan berbagai komunitas Linux akan mengerjakan sisanya. Terutama jika perangkat lunak Anda populer, HOWTO akan muncul untuk setiap distribusi, memberikan instruksi pengaturan yang diperlukan. Atau, jika perangkat lunak Anda dapat didistribusikan secara bebas (yang dapat Anda lakukan meskipun itu bukan produk gratis, asalkan lisensi Anda mengizinkannya), distribusi yang lebih populer akan memiliki semacam repositori alternatif yang membawa salinan perangkat lunak Anda.

Komunitas umumnya sangat baik tentang hal ini, dan pengguna berpengalaman akan rela melakukan banyak kerja keras ini untuk Anda, jika Anda membiarkannya.

perkiraan kami adalah pasar Linux kira-kira 5-15% dari semua pengguna dan para pengguna itu mungkin tidak mau membayar untuk usaha kami

Kesalahpahaman lain yang disayangkan dan sangat keliru .

Hanya karena pengguna Linux mendapatkan sistem operasi mereka secara gratis, bukan berarti mereka tidak mau membayar untuk perangkat lunak. Jika perangkat lunaknya sangat bagus dan ada banyak permintaan untuk itu, pengguna Linux akan sering lebih bersedia untuk berpisah dengan uang mereka daripada pengguna Windows Anda. Lihat saja Humble Indie Bundles , di mana pengguna Linux, rata-rata, membayar lebih dari dua kali lipat per pengguna dibandingkan dengan pengguna Windows.

Mungkin juga bahwa produk Anda mungkin memiliki permintaan yang lebih besar di antara pengguna Linux daripada pada platform lain (yang kami tidak bisa tahu tanpa mengetahui produk Anda), tergantung pada jenis perangkat lunak apa yang ada di arena itu. Anda mungkin memiliki pasar potensial yang lebih besar daripada yang Anda sadari.

greyfade
sumber
4

Dengan sikap seperti itu, aku akan mengabaikannya. Mereka terdengar seperti segmen X, di mana X bisa apa saja , yang akan mengeluh apa pun yang Anda lakukan. Lepaskan versi Linux atau tidak, itu pilihan Anda, bukan milik mereka.

Joe Internet
sumber
1

Jika Anda bekerja untuk Nvidia ...

Demi kasih tuhan, hisaplah dan tulislah beberapa driver yang layak.

Jika tidak, jika Anda melakukan aplikasi bisnis biasa, targetkan proyek-proyek masa depan untuk dijalankan pada C #.

Mono sepenuhnya kompatibel hingga .NET 3.5 dan bahkan dapat menggunakan winforms GUI. Satu-satunya modul yang perlu Anda waspadai adalah modul-modul khusus OS tetapi jumlahnya sedikit dan jarang.

Evan Plaice
sumber