クロスプラットフォームソフトウェア

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

計算クロスプラットフォームソフトウェア(また、マルチプラットフォームソフトウェアまたはプラットフォームに依存しないソフトウェアが)であるコンピュータソフトウェア、いくつかのコンピューティング・プラットフォームで動作するように設計されています。[1]クロスプラットフォームソフトウェアの中には、プラットフォームごとに個別のビルドが必要なものもありますが、特別な準備なしで任意のプラットフォームで直接実行したりインタプリタ言語で記述したりインタプリタやランタイムパッケージが含まれるポータブルバイトコードにコンパイルしたりできるものもあります。サポートされているすべてのプラットフォームの共通または標準コンポーネント。[2]

たとえば、クロスプラットフォームアプリケーションは、Microsoft WindowsLinux、およびmacOS実行できますクロスプラットフォームソフトウェアは、多くのプラットフォームで実行される場合と、わずか2つのプラットフォームで実行される場合があります。クロスプラットフォーム開発のためのいくつかのフレームワークは、コードネームの一つKivyQtのフラッターNativeScriptXamarinPhoneGapのイオン性、およびネイティブに反応します[3]

プラットフォーム

プラットフォームとは、オペレーティングシステム(OS)またはアプリケーションが実行されるプロセッサ(CPU)またはその他のハードウェアの種類、OSの種類、またはその2つの組み合わせを指します[4]一般的なプラットフォームの例はx86アーキテクチャで実行されているMicrosoft WindowsOSです。他のよく知られているデスクトッププラットフォームは、Linux / UnixmacOSで、どちらもクロスプラットフォームです。[4]ただし、スマートフォンなど、プラットフォームでもあるデバイスはたくさんあります。アプリケーションは、特定のプラットフォームの機能(ハードウェア、OS、またはそれが実行される仮想マシン(VM)。たとえば、Javaプラットフォームは、多くのOSとハードウェアタイプで実行される一般的なVMプラットフォームです。

ハードウェア

ハードウェアプラットフォームは、命令セットアーキテクチャを参照できます例:x86アーキテクチャとそのバリアント(IA-32x86-64など)これらのマシンは、多くの場合、Microsoft Windowsの1つのバージョンを実行しますが[5]、Linux、OpenBSDNetBSD、macOS、FreeBSDなどの他のOSを実行できます

32ビット ARMアーキテクチャ(およびそれ以降の64ビット版)、スマートフォン上に共通しているタブレットコンピュータアンドロイド、iOSと他の実行、モバイルオペレーティングシステム

ソフトウェア

ソフトウェアプラットフォームは、 OSまたはいずれかになりますプログラミング環境より一般的に、それは両方の組み合わせですが、。例外はJavaで、これはOSに依存しないVMを使用してJavaバイトコードを実行しますソフトウェアプラットフォームの例は次のとおりです。

マイナー/歴史的

Java

Java言語は、通常のJavaプラットフォームの一部であるVM上で動作するようにコンパイルされます。 Java VM(JVM)は、ソフトウェアに実装されたCPUであり、すべてのJavaコードを実行します。これにより、JVMを実装するすべてのシステムで同じコードを実行できます。 Javaソフトウェアは、ハードウェアベースのJavaプロセッサで実行できます。これは主に組み込みシステムで使用されます。

適切な権限が付与されている場合、JVMで実行されているJavaコードは、ディスクI / OやネットワークアクセスなどのOS関連サービスにアクセスできます。 JVMは、Javaアプリケーションに代わってシステムコールを実行します。これにより、ユーザーはACLに応じて適切な保護レベルを決定できます。たとえば、ディスクとネットワークへのアクセスは通常、デスクトップアプリケーションでは有効になっていますが、ブラウザベースのアプレットでは有効になっていませんJavaネイティブ・インターフェース(JNI)は、移植の損失で、アクセスOS固有の機能に使用することができます。

現在、Java Standard Editionソフトウェアは、Microsoft Windows、macOS、いくつかのUnixライクなOS、および組み込みデバイス用のいくつかのリアルタイムオペレーティングシステムで実行できます。モバイルアプリケーションの場合、ブラウザプラグインはWindowsおよびMacベースのデバイスに使用され、AndroidにはJavaのサポートが組み込まれています。などのJavaのサブセットもありますJavaのカードまたはJavaプラットフォーム、マイクロエディションリソースに制約のあるデバイス用に設計されたが、。

実装

ソフトウェアがクロスプラットフォームと見なされるには、複数のコンピューターアーキテクチャまたはOSで機能する必要があります。 OSが異なればアプリケーションプログラミングインターフェイス(API)も異なるため、このようなソフトウェアの開発は時間のかかる作業になる可能性があります。たとえば、LinuxはWindowsとは異なるAPIを使用します。

1つのOS用に作成されたソフトウェアは、OSがサポートするすべてのアーキテクチャで自動的に機能するとは限りません。一例として、OpenOffice.orgがあります。これは、2006年には、x86-64標準を実装するAMD64またはIntel64プロセッサでネイティブに実行されませんでした2012年までに、これらのシステムに「ほとんど」移植されました。[8] ソフトウェアがCC ++などの一般的なプログラミング言語で書かれているからといって、その言語をサポートするすべてのOSで実行されるわけではなく、同じOSの異なるバージョンでも実行されるわけではありません。

Webアプリケーション

Webアプリケーションは通常、クロスプラットフォームとして説明されます。これは、理想的には、任意のWebブラウザーからアクセスできるためです。ブラウザーがプラットフォームです。 Webアプリケーションは通常、クライアントサーバーモデルを採用していますが、複雑さと機能は大きく異なります。機能への欲求と互換性の必要性を両立させるのは難しい場合があります。

基本的なWebアプリケーションは、ステートレスサーバーからすべてまたはほとんどの処理を実行し、その結果をクライアントのWebブラウザーに渡します。アプリケーションとのすべてのユーザー操作は、データ要求とサーバー応答の単純な交換で構成されます。このタイプのアプリケーションは、ワールドワイドウェブアプリケーション開発の初期段階では標準でした。このようなアプリケーションは、静的Webページを提供する場合と同じ単純なトランザクションモデルに従います。今日でも、特にクロスプラットフォームの互換性とシンプルさが高度な機能よりも重要であると見なされている場合は、比較的一般的です。

高度なWebアプリケーションの代表的な例には、GmailA9.comGoogleマップWebサイト、およびMicrosoftのライブ検索サービス(現在はBingへのWebインターフェイスが含まれます。このようなアプリケーションは、人気のあるWebブラウザの最新バージョンにのみ見られる追加機能に日常的に依存しています。これらの機能には、AjaxJavaScriptダイナミックHTMLSVG、およびリッチWebアプリケーションの他のコンポーネントが含まれます古いバージョンはしばしばこれらを欠いています。

設計

互換性と機能性の競合する利益のために、多くの設計戦略が出現しました。

多くのソフトウェアシステムは、プラットフォームに依存するコードが最上位層と最下位層に制限されている階層化アーキテクチャを使用しています。

優雅な劣化

グレースフルデグラデーションは、すべてのユーザーとプラットフォームに同じまたは類似の機能を提供しようとしますが、その機能は、より制限されたクライアントブラウザーの最小公分母にまで減少します。たとえば、機能が制限されたブラウザを使用してGmailにアクセスしようとしているユーザーは、Gmailが基本モードに切り替わり、機能が制限されているものの、まだ使用されていることに気付く場合があります。

複数のコードベース

一部のソフトウェアは、同等の機能を備えた、異なる(ハードウェアおよびOS)プラットフォーム用の個別のコードベースで維持されます。これには、コードを維持するためにより多くの労力が必要ですが、プラットフォーム固有のコードの量が多い場合は価値があります。

単一のコードベース

この戦略は、複数のプラットフォーム固有の形式にコンパイルできる1つのコードベースを持つことに依存しています。1つの手法は、条件付きコンパイルです。この手法では、すべてのプラットフォームに共通のコードが繰り返されることはありません。特定のプラットフォームにのみ関連するコードのブロックは条件付きになっているため、必要な場合にのみ解釈またはコンパイルされます。もう1つの手法は、機能の分離です。これにより、ブラウザーやOSでサポートされていない機能が無効になり、ユーザーに完全なアプリケーションが提供されます。(参照:関心の分離。)この手法は、(スクリプト言語のように)解釈されたコードが実行中のプラットフォームにクエリを実行してさまざまなブロックを条件付きで実行できるWeb開発で使用されます。[9]

サードパーティのライブラリ

サードパーティのライブラリは、ベンダーロックインを犠牲にして、単一の統合されたAPIの背後にクライアントの差別化の複雑さを隠すことにより、クロスプラットフォーム機能を簡素化しようとます。

レスポンシブウェブデザイン

レスポンシブウェブデザイン(RWD)は、サイトの視覚的なレイアウトを作成して、モバイルからさまざまなデバイスで最適な表示エクスペリエンス(サイズ変更、パン、スクロールを最小限に抑えた簡単な読み取りとナビゲーション)を提供することを目的としたウェブデザインアプローチです。電話からデスクトップコンピューターのモニターへ。この手法では、プラットフォーム固有のコードはほとんどまたはまったく使用されません。

テスト

クロスプラットフォームアプリケーションには、さらに多くの統合テストが必要です。一部のWebブラウザーは、同じマシンに異なるバージョンをインストールすることを禁止しています。複数のプラットフォームをターゲットにするために使用されるいくつかのアプローチがありますが、それらのすべては、テストとメンテナンスのためにかなりの手作業を必要とするソフトウェアになります。[10]この問題の回避策として、完全仮想化などの手法が使用されることがあります。

ページオブジェクトモデルなどのツールを使用すると、クロスプラットフォームテストをスクリプト化して、1つのテストケースでアプリの複数のバージョンをカバーできます。異なるバージョンのユーザーインターフェイスが類似している場合は、1つのテストケースですべてをテストできます。

従来のアプリケーション

Webアプリケーションの人気はますます高まっていますが、多くのコンピューターユーザーは、クライアント/ Webサーバーアーキテクチャに依存しない従来のアプリケーションソフトウェアを使用しています。従来のアプリケーションとWebアプリケーションの違いは必ずしも明確ではありません。Webアプリケーションと従来のアプリケーションの機能、インストール方法、およびアーキテクチャは重複しており、区別が曖昧になっています。それにもかかわらず、この単純化された区別は、一般的で有用な一般化です。

バイナリソフトウェア

従来のアプリケーションソフトウェアは、バイナリファイル、特に実行可能ファイルとして配布されてきました。実行可能ファイルは、それらが構築されたプラットフォームのみをサポートします。つまり、単一のクロスプラットフォーム実行可能ファイルは、特定のプラットフォームでは実行されないコードで非常に肥大化する可能性があります。代わりに、通常、実行可能ファイルの選択があり、それぞれが1つのプラットフォーム用に構築されています。

CやC ++で記述されたものなど、バイナリ実行可能ファイルとして配布されるソフトウェアの場合、単一のコードベースを複数のバイナリ実行可能ファイルに変換(トランスコンパイル)するツールセットを使用して、プラットフォームごとにソフトウェアビルドが必要です。たとえば、オープンソースのWebブラウザであるFirefoxは、Windows、macOS(Apple Inc.ユニバーサルバイナリと呼んでいるPowerPCとx86の両方)、Linux、および複数のコンピュータアーキテクチャのBSDで利用できます。 4つのプラットフォーム(この場合、Windows、macOS、Linux、およびBSD)は、大部分が同じソースコードからのものですが、別々の実行可能ディストリビューションです

さまざまなツールセットを使用しても、さまざまなプラットフォームで機能する実行可能ファイルを構築するには不十分な場合があります。この場合、プログラマーはソースコードを新しいプラットフォームに移植する必要があります。たとえば、x86ファミリのWindowsですでに実行されているFirefoxなどのアプリケーションは、x86(および場合によっては他のアーキテクチャ)のLinuxでも実行できるように変更および再構築できます。コードの複数のバージョンは、個別のコードベースとして保存することも、1つのコードベースにマージすることもできます。

移植の代わりに、クロスプラットフォーム仮想化があります。この仮想化では、あるプラットフォーム用にコンパイルされたアプリケーションを、ソースコードやバイナリを変更せずに別のプラットフォームで実行できます。一例として、IntelベースのMacintoshコンピュータに組み込まれているAppleのRosettaはPowerPCCPUを使用した前世代のMac用にコンパイルされたアプリケーションを実行します。もう1つの例はIBMPowerVM Lx86です。これにより、Linux / x86アプリケーションをLinux / PowerOS上で変更せずに実行できます。

クロスプラットフォームのバイナリソフトウェアの例:

  • LibreOfficeののオフィススイートは、Microsoft Windows、MacOSの、多くのLinuxディストリビューションのために構築されているFreeBSDのNettBSDOpenBSDの、アンドロイド、iOSの、クロームのOS、WebベースのCollaboraオンラインや他の多くの。[11] [12]これらの多くは、IA-32x86-64ARMなどのプロセッサアーキテクチャを備えたいくつかのハードウェアプラットフォームでサポートされています[13]

スクリプトとインタプリタ言語

スクリプトは、そのインタープリターが複数のプラットフォームで使用可能であり、スクリプトが言語に組み込まれた機能のみを使用する場合、クロスプラットフォームと見なすことができます。たとえばUnixライクなシステムPython記述されたスクリプトは、Windowsでもほとんどまたはまったく変更なしで実行される可能性があります。これは、PythonもWindowsでも実行されるためです。実際、多くの実装があります(IronPython for .NET Frameworkなど)。同じことが多くのオープンソーススクリプト言語にも当てはまります

バイナリ実行可能ファイルとは異なり、スクリプトを解釈するソフトウェアを備えたすべてのコンピューターで同じスクリプトを使用できます。これは、スクリプトが通常テキストファイルのプレーンテキスト保存されるためです改行文字の表現など、些細な問題がある場合があります

いくつかの人気のあるクロスプラットフォームスクリプト言語は次のとおりです。

  • bashは- AのUnixシェルは、一般的にLinux上で実行し、経由システムUnixライクなだけでなく、Windows上の他の現代のCygwin のPOSIX互換レイヤ。
  • Perl – 1987年に最初にリリースされました。CGIプログラミング、小規模システム管理タスクなどに使用されます。
  • PHP –主にWebアプリケーションに使用されます。
  • Python実行時の効率ではなく、迅速なアプリケーション開発と記述の容易さに焦点を当てた言語
  • Ruby –読みやすいことを目的としたオブジェクト指向言語。Ruby onRailsを介してWeb上で使用することもできます
  • Tcl –動的プログラミング言語。Webおよびデスクトップアプリケーション、ネットワーキング、管理、テストなど、幅広い用途に適しています。

ビデオゲーム

クロスプラットフォームまたはマルチプラットフォームは、さまざまなビデオゲームコンソールでリリースされたビデオゲームにも適用できる用語ですクロスプラットフォームゲームの例としてはMiner 2049erTomb Raider:LegendFIFAシリーズNHLシリーズMinecraftなどがあります。

それぞれが、WiiPlayStation 3Xbox 360パーソナルコンピューターモバイルデバイスなどのさまざまなゲームプラットフォームでリリースされています

あるプラットフォームは、他のプラットフォームよりも作成が困難です。これを回避するために、ビデオゲームは最初にいくつかのプラットフォームでリリースされ、次に他のプラットフォームでリリースされる場合があります。通常、これは新しいゲームシステムがリリースされたときに発生します。これは、ビデオゲーム開発者がそのハードウェアとソフトウェアに精通している必要があるためです。

一部のゲームは、開発者とビデオゲームコンソールメーカー間のライセンス契約により、開発が1つの特定のコンソールに制限されているため、クロスプラットフォームではない場合があります。例として、ディズニーは最新の任天堂ソニーのゲーム機でリリースすることを意図してゲームを作成することができますディズニーが最初にソニーとゲームのライセンスを取得した場合、ソニーのコンソールでのみゲームを短期間または無期限にリリースする必要がある場合があります。

クロスプラットフォームプレイ

いくつかの開発者は、さまざまなプラットフォームを使用しながらオンラインでゲームをプレイする方法を実装しています。PsyonixEpic GamesMicrosoftValveはすべてXbox360およびPlayStation3のゲーマーがPCゲーマーと遊ぶことを可能にするテクノロジーを備えており、使用するプラットフォームの決定は消費者に任されています。 PCゲームとコンソールゲームの間でこのレベルの双方向性を可能にした最初のゲームはQuake3でした。[14]

機能クロスプラットフォームというゲームオンラインプレイが含まロケットリーグファイナルファンタジーXIVストリートファイターVキラー本能パラゴン寓話フォーチュンのMinecraftを一緒にそのベターでの更新のWindows 10、VRエディション、ポケット版およびXboxの一つ

プログラミング

クロスプラットフォームプログラミングは、複数のプラットフォームで動作するソフトウェアを意図的に作成する方法です。

アプローチ

クロスプラットフォームアプリケーションを作成するには、さまざまな方法があります。 1つのアプローチは、異なるソースツリーに同じソフトウェアの複数のバージョンを作成することです。つまり、アプリケーションのMicrosoft Windowsバージョンにはソースコードファイルのセットがあり、Macintoshバージョンには別のセットがある場合がありますがFOSS * nixシステムには三番目。これは簡単ですが、1つのプラットフォームのみを対象に開発する場合と比較して、大規模なチームに支払うか、製品のリリースに時間がかかる場合は、はるかに多くの費用がかかる可能性があります。また、追跡および修正するバグが増える可能性もあります。

別のアプローチは、プラットフォーム間の違いを隠すソフトウェアを使用することです。この抽象化レイヤーは、アプリケーションをプラットフォームから分離します。このようなアプリケーションはプラットフォームに依存しません。 JVMで実行されるアプリケーションは、この方法で構築されます。

一部のアプリケーションは、クロスプラットフォームプログラミングのさまざまな方法を組み合わせて最終的なアプリケーションを作成します。例としては、Firefox Webブラウザーがあります。これは、抽象化を使用して低レベルのコンポーネントの一部を構築し、プラットフォーム固有の機能(GUIなど)を実装するための個別のソースサブツリーと、ソフトウェアの移植性を容易にするための複数のスクリプト言語の実装を備えています。Firefoxは従来のNetscapeスタイルのブラウザプラグインに加えて、ブラウザを拡張するためのXULCSS、およびJavaScriptを実装しています。ブラウザ自体の多くは、XUL、CSS、およびJavaScriptで記述されています。

ツールキットと環境

クロスプラットフォームプログラミングのプロセスを支援するために利用できるマントツール[15] [16]があります。

  • 8番目:GUIレイヤーとしてJuceを利用する開発言語現在、Android、iOS、Windows、macOS、Linux、RaspberryPiをサポートしています。
  • Anant Computing:キーボードを含むすべてのインドの言語で動作し、すべてのOSでAppWalletとネイティブパフォーマンスをサポートするモバイルアプリケーションプラットフォーム。
  • AppearIQ:エンタープライズ環境でのアプリの開発とデプロイのワークフローをサポートするフレームワーク。ネイティブに開発されたコンテナは、APIからHTML5コードを介してモバイルデバイスまたはタブレットのハードウェア機能を提供するため、さまざまなプラットフォームで実行されるモバイルアプリの開発が容易になります。
  • ボーデン:C ++で記述されたUIフレームワーク。
  • Cairoベクターグラフィックベースのデバイスに依存しないAPIを提供するために使用される無料のソフトウェアライブラリ。これは、さまざまなバックエンドにまたがる2次元描画用のプリミティブを提供するように設計されています。CairoはCで書かれており、多くのプログラミング言語にバインドされています。
  • Cocos2d:2Dおよびシンプルな3Dクロスプラットフォームゲームおよびアプリケーションを開発するためのオープンソースツールキットおよびゲームエンジン。
  • Codename One:JavaおよびKotlin開発者向けのオープンソースのWrite Once Run Anywhere(WORA)フレームワーク。
  • Delphi:開発にPascalベースの言語を使用するIDE。Android、iOS、Windows、macOS、Linuxをサポートしています。
  • Ecere SDK:eCで記述され、CやPythonなどの追加言語をサポートするGUIおよび2D / 3DグラフィックツールキットとIDE Linux、FreeBSD、Windows、Android、macOS、およびEmscriptenまたはBinaryen(WebAssembly)を介したWebをサポートします。
  • Eclipse:オープンソース開発環境。ソフトウェア開発用の多くのツールをサポートする構成可能なアーキテクチャーを使用してJavaで実装されます。アドオンは、JavaやC ++を含むいくつかの言語で利用できます。
  • FLTK:オープンソースのツールキットですが、GUIに制限されているため、より軽量です。
  • FlutterGoogleによって開発されたAndroidおよびiOS用のクロスプラットフォームUIフレームワーク
  • fpGUIObjectPascalに完全に実装されているオープンソースのウィジェットツールキット。現在、Linux、Windows、およびWindowsCEの一部をサポートしています。
  • GeneXus知識表現に基づくクロスプラットフォームアプリケーションの作成と展開のためのWindows迅速なソフトウェア開発ソリューションであり、C#COBOLAndroidおよびBlackBerryスマートデバイスを含むJavaAppleモバイルデバイス用のObjective-CRPGRubyVisual Basic、およびVisualFoxPro
  • GLBasic:C ++コードを生成するBASIC方言およびコンパイラ。多くのプラットフォーム用のクロスコンパイラが含まれており、多数のプラットフォーム(Windows、Mac、Linux、Android、iOS、および一部のエキゾチックなハンドヘルド)をサポートしています。
  • Godot:Godotエンジンを使用するSDK。
  • GTK +:X11およびMicrosoftWindowsを搭載したUnixライクなシステム用のオープンソースウィジェットツールキット。
  • Haxe:オープンソース言語。
  • Juce:C ++で記述されたアプリケーションフレームワークで、コードを変更せずに、多数のシステム(Microsoft Windows、POSIX、macOS)でネイティブソフトウェアを記述します。
  • KivyPythonで記述されたオープンソースのクロスプラットフォームUIフレームワークAndroidiOSLinuxOS XWindowsRaspberryPiをサポートしています
  • LEADTOOLS:認識、ドキュメント、医療、イメージング、およびマルチメディアテクノロジーをWindows、iOS、macOS、Android、Linux、およびWebアプリケーションに統合するためのクロスプラットフォームSDKライブラリ。[17]
  • LiveCode:HyperTalkに触発された商用のクロスプラットフォームの迅速なアプリケーション開発言語。
  • Lazarus:FreePascalコンパイラのプログラミング環境。自立型のグラフィカルおよびコンソールアプリケーションの作成をサポートし、Linux、MacOSX、iOS、Android、WinCE、Windows、およびWEBで実行されます。
  • Max / MSPプラットフォームに依存しないコードをプラットフォーム固有のランタイム環境でmacOSおよびWindows用のアプリケーションにカプセル化するビジュアルプログラミング言語クロスプラットフォームのAndroidランタイム。変更されていないAndroidアプリをiOSおよびmacOSでネイティブに実行できるようにします
  • Mendix:クラウドベースのローコードアプリケーション開発プラットフォーム。
  • MonoCrossモデルとコントローラーはクロスプラットフォームですが、ビューはプラットフォーム固有である、オープンソースのモデル-ビュー-コントローラーのデザインパターン。[18]
  • モノラルMicrosoft .NETのオープンソースクロスプラットフォームバージョン(アプリケーションおよびプログラミング言語のフレームワーク)
  • MoSync:C ++ファミリのモバイルプラットフォームアプリ開発用のオープンソースSDK。
  • Mozillaアプリケーションフレームワーク:macOS、Windows、およびLinuxアプリケーションを構築するためのオープンソースプラットフォーム。
  • AndroidおよびiOS開発用のクロスプラットフォームJavaScript / TypeScriptフレームワーク。
  • OpenGL:3Dグラフィックライブラリ。
  • Pixel Game Maker MV:WindowsおよびNintendoSwitchゲームを開発するためのWindows専用の2Dゲーム開発ソフトウェア
  • PureBasic:macOS、Windows、およびLinuxアプリケーションを構築するための独自の言語とIDE。
  • ReNativeReactNativeを使用してマルチプラットフォームプロジェクトを構築するためのユニバーサル開発SDK。最新のiOS、tvOS、Android、Android TV、Web、Tizen TV、Tizen Watch、LG webOS、macOS / OSX、Windows、KaiOS、Firefox OS、FirefoxTVプラットフォームが含まれます。
  • QtX11、Microsoft Windows、macOS、およびその他のシステムを備えたUnixライクなシステム用のアプリケーションフレームワークおよびウィジェットツールキットプロプライエタリライセンスオープンソースライセンスの両方で利用できます
  • シンプルで高速なマルチメディアライブラリ:グラフィック、入力、オーディオなどへの低レベルおよび高レベルのアクセスを提供するマルチメディアC ++ API
  • Simple DirectMedia Layer:さまざまなプラットフォームのグラフィックス、サウンド、および入力APIの抽象化を作成するCで記述されたオープンソースのマルチメディアライブラリLinux、Windows、macOSなどのOSで動作し、ゲームやマルチメディアアプリケーションを対象としています。
  • SmartfaceJavaScriptコードエディターを備えたWYSIWYGデザインエディターを使用して、AndroidおよびiOS用のモバイルアプリケーションを作成するためのネイティブアプリ開発ツール
  • Tcl / Tk
  • Ultimate ++:プログラマーの生産性に焦点を合わせたC ++の迅速なアプリケーション開発フレームワーク。これには、一連のライブラリ(GUI、SQLなど)と統合開発環境が含まれています。WindowsおよびUnixライクなOSをサポートします。
  • Unity:UnityEngineを使用するもう1つのクロスプラットフォームSDK。
  • Unoプラットフォーム:C#を使用したWindows、macOS、iOS、Android、WebAssembly、Linux。
  • Unreal:UnrealEngineを使用するクロスプラットフォームSDK。
  • V-Playエンジン:V-Playは、人気のあるQtフレームワークに基づくクロスプラットフォーム開発SDKです。V-PlayアプリとゲームはQtCreator内で作成されます。
  • WaveMaker:レスポンシブウェブおよびハイブリッドモバイル(AndroidおよびiOS)アプリケーションを作成するためのローコード開発ツール。
  • WinDev:Windows、Linux、.Net、Java、およびWebブロワー向けの統合開発環境。ビジネスおよび産業用アプリケーション向けに最適化されています。
  • wxWidgetsアプリケーションフレームワークでもあるオープンソースのウィジェットツールキット[19] X11、Microsoft Windows、macOSを搭載したUnixライクなシステムで動作します。
  • Xojo:オブジェクト指向プログラミング言語を使用してデスクトップ、Web、iOSアプリを作成するRADIDEXojoは、macOS、Windows、Linux、およびRaspberryPi用のネイティブのコンパイル済みデスクトップアプリを作成します。スタンドアロンサーバーとして、またはCGIを介して実行できるコンパイル済みWebアプリを作成します。また、最近、ネイティブiOSアプリを作成する機能が追加されました。

課題

クロスプラットフォームソフトウェアを開発する場合、多くの課題があります。

  • クロスプラットフォームアプリケーションのテストは、プラットフォームが異なれば動作や微妙なバグがわずかに異なる可能性があるため、かなり複雑になる可能性があります。この問題により、一部の開発者は、クロスプラットフォーム開発を「一度書けばどこでもデバッグ」、SunMicrosystemsの「一度書けばどこでも実行」というマーケティングスローガンを嘲笑するようになりました。
  • 開発者は、多くの場合、すべてのプラットフォームで利用可能な機能の最小公分母サブセットの使用に制限されています。これにより、アプリケーションのパフォーマンスが低下したり、開発者が各プラットフォームの最先端の機能を使用できなくなったりする可能性があります。
  • プラットフォームが異なれば、ユーザーインターフェイスの規則も異なることがよくありますが、クロスプラットフォームアプリケーションが常に対応できるとは限りません。たとえば、macOSとGNOME用に開発されたアプリケーションは、ウィンドウまたはダイアログの右側に最も重要なボタンを配置することになっていますが、MicrosoftWindowsとKDEには反対の規則があります。これらの違いの多くは微妙ですが、これらの規則に準拠していないクロスプラットフォームアプリケーションは、ユーザーにとって不格好または異質に感じる可能性があります。すばやく作業する場合、このような反対の規則により、変更を保存するか破棄するかを確認するダイアログボックスなどデータが失われる可能性があります。
  • スクリプト言語とVMバイトコードは、使用するたびにネイティブの実行可能コードに変換する必要があり、パフォーマンスが低下します。このペナルティは、ジャストインタイムコンパイルなどの手法を使用して軽減できますただし、ある程度の計算オーバーヘッドは避けられない場合があります。
  • プラットフォームが異なれば、RPMMSIなどのネイティブパッケージ形式を使用する必要がありますInstallAnywhereなどのマルチプラットフォームインストーラーは、このニーズに対応します。
  • クロスプラットフォームの実行環境では、クロスプラットフォームのセキュリティ上の欠陥が発生し、クロスプラットフォームのマルウェアに適した環境が作成される可能性があります。[20]

も参照してください

参考文献

  1. ^ 「設計ガイドライン:用語集」java.sun.com 2011年10月19日取得
  2. ^ 「SDDテクノロジーブログ:クロスプラットフォームの定義」SDDテクノロジー20201018日取得
  3. ^ リーPリチャードソン(2016-02-16)。「XamarinvsIonic:A likhit likhit 161616161 Mobile、Cross Platform、Shootout」
  4. ^ B 「プラットフォームの定義」Linux情報プロジェクト2014年327日取得
  5. ^ 2011年3月の時点で約89%の市場シェアを持っているネットマーケットシェアのウェブサイト上
  6. ^ 「モノについて」mono-project.com 2015年12月17取得
  7. ^ 「AppleはMacのAppleシリコンへの移行を発表しました」アップルニュースルーム2020128日取得
  8. ^ x86-64(AMD64、EM64T)への移植– Apache OpenOfficeWikiWiki.services.openoffice.org(2012-06-22)。2013年7月17日に取得。
  9. ^ Corti、Sascha P.(2011年10月)。「ブラウザと機能の検出」MSDNマガジン取り出さ年1月28 2014
  10. ^ Choudhary、SR(2014)。「Webおよびモバイルアプリケーションのクロスプラットフォームテストとメンテナンス」。ソフトウェアエンジニアリングに関する第36回国際会議のコンパニオンプロシーディングス-ICSEコンパニオン2014:642–645。土井10.1145 /2591062.2591097ISBN 9781450327688S2CID  1903037
  11. ^ Mehrotra、Pranob(2020-12-01)。「CollaboraOfficeスイートはAndroidタブレットとChromebookの新しいレイアウトを取得します」XDA-開発者2021-01-15を取得Collabora Officeは、MicrosoftOfficeスイートに代わる人気のあるオープンソースです。 LibreOfficeをベースにしており、Windows、Linux、iOS、Androidなどのさまざまなプラットフォームで利用できます。今年の7月、オフィススイートのメジャーアップデートにより、ChromeOSデバイスがサポートされるようになりました。
  12. ^ 「iOSおよびAndroid上のCollaboraOfficeがさらに良くなりました!」Adfinis2020-12-15 2021-01-15を取得...タッチ最適化インターフェース:1つはタブレット用、もう1つは電話画面用です。...(iOS、iPadOS、Chromebook、Android)。
  13. ^ 「NextcloudUbuntuアプライアンスはCollaboraOnlineをRaspberryPiイメージに追加します」MuyLinux2021-03-26 2021-03-30を取得人気のあるRaspberryPi4プラットフォーム向けの最初の実行可能なセルフホストWebオフィスソリューション
  14. ^ クリバ。Quake III Arena Giant Bombcast、2013年2月15日。
  15. ^ GUIツールキット、フレームワークページ
  16. ^ 「プラットフォームに依存しないFAQ」2008年8月16日にオリジナルからアーカイブされまし2009年425日取得
  17. ^ 「認識、ドキュメント、医療、イメージング、およびマルチメディア用のクロスプラットフォームSDKライブラリ」www.leadtools.com 2021-03-03を取得しました
  18. ^ 「Xamarinクロスプラットフォームアプリ開発の12の利点」HeadWorks2019年3月15日。
  19. ^ WxWidgetsの説明
  20. ^ ウォーレン、トム(2020-01-14)。「マイクロソフトは、Windows7とそれを実行している何百万台ものPCに別れを告げます」ザ・ヴァージ2020年2月6日取得