web-dev-qa-db-ja.com

普遍的にクロスプラットフォームのC ++コードを記述し、すべてのOS用の製品を出荷するのはそれほど簡単ではないことを説明するにはどうすればよいですか?

当社はWindows用のさまざまなデスクトップ製品を出荷しており、Linuxユーザーの多くはフォーラムで、何年も前にLinux用の製品のバージョンを作成する必要があったと不満を言っています。

  • 私たちは貪欲な企業です
  • 私たちのすべての技術スペシャリストは適格ではありません

私たちの平均的な製品は、300万行のC++コードのようなものです。

私と私の同僚の分析は次のとおりです。

  • クロスプラットフォームのC++コードを書くのはそれほど簡単ではありません
  • linuxのすべての広範なバージョンに対応するために多数の配布パッケージを準備し、それらを保守するには時間がかかる
  • 私たちの推定では、Linux市場は全ユーザーの5-15%程度であり、これらのユーザーは私たちの努力にお金を払いたくないでしょう。

これが持ち上がったときの反応は、私たちは貪欲な資格のない馬鹿であり、すべてが正しく行われると、これはすべて簡単で痛みがないということです。

クロスプラットフォームコードの記述と多数の配布パッケージの維持に多大な労力がかかるという事実の評価は、どれほど妥当ですか。疑いの陰を越えて正確にどれだけの努力が必要かを示す実際のストーリーを使った簡単で詳細な分析はどこにありますか?

15
sharptooth

大多数の人々は従業員であり、したがって、彼らが利益を上げることを気にする必要がある世界に住んでいないことに留意してください。彼らは仕事場に現れ、仕事をし、家に帰りますが、プロセス全体のしくみを実際に考えたことはありません。そして、非常に賢明ですが、多くの技術者はビジネスについて積極的に無知であり、多くの場合、教義に目がくらんでいます。

もちろん、その規模のxプラットフォームソフトウェアを作成するのは簡単なことではありません。特に、何十人もの開発者と何百万人ものユーザーを抱える会社を借りる場合。そしてそれは技術的な制限だけではありません。コストとメリットのすべて。はい、あなたはcouldその後、アプリをLinuxに移植します(ただし、既に述べたように、すでにWINEで実行可能です)。もちろん、その年の開発期間は自由ではありません。そして最後に、あなたはあなたをネットでつなぎますたぶん追加の5-15%ユーザー(見積もりに基づく)。または、同じお金/労力を費やして、それを新しいバージョンとしてWindows開発に集中させるか、すべてをマーケティングに投入して、ユーザーベースに50%を追加することができます。スマートな選択のように聞こえますか? (明らかに、数値は会社に合わせてカスタマイズする必要があり、最終的な結果は移植に有利になる場合があります)。

それが「真の信者」を説得するのに役立つかどうかはわかりませんが、その賢いビジネスの動きです。そして、あなたが賢いビジネスの動きを作らないなら、あなたは廃業しています。そして、確かにLinuxバージョンはありません。

8
GrandmasterB

ここで考慮すべき点は2つあります。

1つ目は、ある意味では正しいということです。クロスプラットフォームのC++を書くのはそれほど難しくありません最初から計画していた場合。これはほぼ間違いなくあなたが見ている問題です。ほとんどのオープンソースアプリケーション(Linuxユーザーが平均的な日に触れるほとんどのアプリケーション)は、ばかげてクロスプラットフォームです。 CまたはC++で記述され、WindowsおよびLinuxだけでなく、x86、x86-64、ARM、SPARCなどのMacOS、BSD、Solarisなどでも実行される、平均的なLinuxユーザーが毎日操作するアプリケーションの数について考えてください。これは、一部には、コードをスクラッチしてシステムで実行するためにスクラッチする必要があるためですが、慣例として、クロスプラットフォームの移植性を計画することもあります。

第二に、市場はあなたが思っているよりも実行可能かもしれません。 Linuxを使っている人はソフトウェアにお金をかけたくないという大きな誤解があります。一部の人にとっては本当かもしれませんが、Linuxを使用する人はたくさんいます(ほとんどの場合、私はそう思います)。それは、Linuxの方が価格が高くないため、彼らにとってよりうまく機能し、好むためです。また、会社が主にプロフェッショナルな環境で使用される製品を製造している場合、企業はLinuxシステムで実行するソフトウェアの支払いに慣れています。

他の人が言ったように、パッケージングについてあなたがするポイントに関しては、主要なディストリビューションの最新バージョン用のパッケージを作成する必要があるだけです。実際にパッケージを作成するのはそれほど難しいことではなく、主要なディストリビューションのほとんどはdebianパッケージ(debian、ubuntuなど)またはRPM(Fedora、suse、centos、Mandrake)を使用しているため、一部のスクリプトを変更することは非常にマイナーですベースライン.debとベースライン.rpmから複数のパッケージを作成し、他のすべての人はバイナリとreadmeを含むtarballを投げるだけで、インストール方法がわかります。または、すべてのパッケージをスキップして、bashまたはPerlスクリプトを含む単一のtarballをポストして、インストールを実行することもできます。

Joe Internetが言ったように、不満を言うフォーラムのユーザーに対処する方法については、彼らは何があっても不平を言う人の割合にすぎないかもしれませんが、私が最初に行うことはあなたが持っていることを説明しようとすることですクロスプラットフォームのサポートを考慮して設計されていない大量のレガシーコード。第2に、Linuxへの移植を行うことで財政的な支援が得られるかどうかを正直に確認し、その結果を受け入れることです。最後に、移植が経済的に実現可能でない場合は、WINEでプログラムを適切に機能させるために、いくつかの作業を行うことを参照してください。 WINEは最初のソリューションではないはずですが、Linuxでアプリを使用したいだけの人々を困惑させる可能性があり、完全な移植よりも安価なプロジェクトになる可能性があります。実際、プロジェクトの一部としてコードをWINEコードベースに追加すると、新しい市場に参入することができるだけでなく、コミュニティから多大な好意を得ることができます。

16
Cercerilla

アドビ、あなたですか?

しかし真剣に、彼らがLinuxのバージョンを予約できるように、ある種の賞金を用意してください。時間内に価値のあるポートを作成するのに十分な注文を受け取った場合は、それ以外の場合は返金して、価値のあるものにする気になっている人々が不足している証拠を手に入れましょう。

ただし、移植されたものがある場合は、最新のUbuntu LTSリリースであるRHEL、SLEDをターゲットにし、tar.gzを提供するだけで、他の何かを使用したい場合に作業を開始できるようになります。これで、3つのパッケージについて心配する必要があり、他の誰もがtar.gzバージョンを実行するのに十分なことを知っているでしょう。

10
Travis Watkins

クロスプラットフォームのC++コードを書くのはそれほど簡単ではありません

全く逆です。クロスプラットフォームの作業を計画し、使用するプラットフォーム固有のAPIの抽象化を提供する場合、コードの大部分はalreadyクロスプラットフォームです。 Boost、Qt、NSPRなどの人気のあるライブラリを既に使用している場合、クロスプラットフォームビルドの作業はほぼ完了しています。

開発サイクルの後半に移植を行うときに最も一般的に発生する問題は、プログラムの一部にプラットフォーム固有のAPIに依存するコードのかなりの部分があり、それらを直接使用する必要がなく、おそらくまったく使用してはならないことです。 (優れたデザインには強く分離されたモジュールがあり、クラスのグループは自由に書き換えられた置換でスワップアウトできます。これが特定のモジュールに当てはまらない場合、それは強いコード臭です。)

多くの場合、簡単な方法は、「Utility」クラスを作成し、その中にプラットフォーム固有のものをすべてトスすることです。 「簡単で無痛」ではありませんが、想像以上に難しいことはありません。

linuxのすべての広範なバージョンに対応するために多数の配布パッケージを準備し、それらを保守するには時間がかかる

これは残念な誤解です。複数のプラットフォームのビルドを維持するには追加の作業が必要になることは事実ですが(専用の毎日のビルドサーバーを設定し、特定のディストリビューション用にパッケージ化する方法を学習するため)、「多くのディストリビューションのためにそれらを維持する必要があります。 ]。 "全く逆です。ほんの一握りのパッケージ(たとえば、Ubuntu、Fedora、および単一のLSB互換のtarball)を維持するだけでよく、さまざまなLinuxコミュニティが残りの作業を行います。特にあなたのソフトウェアが人気がある場合、HOWTOはすべてのディストリビューションに飛びつき、必要なセットアップ手順を提供します。または、ソフトウェアが自由に配布できる場合(ライセンスで許可されていれば、無料の製品でなくてもできる)、より人気がありますディストリビューションには、ソフトウェアのコピーを運ぶある種の代替リポジトリがあります。

コミュニティは一般的にこれについて非常に優れており、経験豊富なユーザーは喜んであなたに代わってこのレッグワークの多くを行います許可すれば

私たちの推定では、Linux市場は全ユーザーの5-15%程度であり、これらのユーザーは私たちの努力にお金を払いたくないでしょう。

別の不幸な、そして非常に誤解誤解。

Linuxユーザーがオペレーティングシステムを無料で入手したからといって、ソフトウェアにお金を払う気がないというわけではありません。ソフトウェアが非常に優れていて、それに対する幅広い需要がある場合、Linuxユーザーは多くの場合、Windowsユーザーよりも多くお金を手放そうとします。 Humble Indie Bundles を見てください。Linuxユーザーは、平均して、ユーザーごとに2倍を超える金額を支払います。 Windowsユーザーへ。

また、その分野に存在する既存のソフトウェアの種類によっては、他のプラットフォームよりもLinuxユーザーの間で製品の需要が高い可能性があります(これは、製品を知らないと分からない)。予想よりも大きな潜在的な市場があるかもしれません。

5
greyfade

そのような態度で、私はそれらを無視します。それらはXのセグメントのように聞こえます。Xはanythingであり、何をしても文句を言います。 Linuxバージョンをリリースするかどうか。それはあなたの選択であり、彼らのバージョンではありません。

4
Joe Internet

NVIDIAで働いているなら...

神の愛のために、それを吸い上げて、すでにいくつかのまともなドライバーを書いてください。

それ以外の場合、通常のビジネスアプリケーションを実行している場合は、C#で実行する将来のプロジェクトをターゲットにします。

Monoは.NET 3.5まで完全に準拠しており、winforms GUIも使用できます。注意が必要な唯一のモジュールはOS固有のモジュールですが、それらは数が少なく、はるかに限られています。

1
Evan Plaice