クロスプラットフォームソフトウェア
コンピューティングにおいて、クロスプラットフォームソフトウェア(マルチプラットフォームソフトウェア、プラットフォーム非依存ソフトウェア、プラットフォーム非依存ソフトウェアとも呼ばれる)は、複数のコンピューティングプラットフォームで動作するように設計されたコンピュータソフトウェアです。[1]クロスプラットフォームソフトウェアの中には、プラットフォームごとに個別のビルドが必要なものもありますが、インタープリタ言語で記述されていたり、インタープリタやランタイムパッケージがサポートされているすべてのプラットフォームで共通または標準のコンポーネントであるポータブルバイトコードにコンパイルされていたりするため、特別な準備なしにどのプラットフォームでも直接実行できるものもあります。[2]
たとえば、クロスプラットフォームアプリケーションは、 Linux、macOS、Microsoft Windowsで実行できます。クロスプラットフォームソフトウェアは、多くのプラットフォームで実行することも、2つのプラットフォームで実行することもできます。クロスプラットフォーム開発用のフレームワークには、Codename One、 ArkUI-X 、Kivy、Qt、GTK、Flutter、NativeScript、Xamarin、Apache Cordova、Ionic、React Native などがあります。[3]
プラットフォーム
プラットフォームとは、オペレーティングシステム(OS) やアプリケーションが実行されるプロセッサ (CPU) やその他のハードウェアの種類、OS の種類、あるいはその 2 つを組み合わせたものを指します。[4]一般的なプラットフォームの例としては、ARM アーキテクチャ ファミリで実行されるAndroidがあります。その他のよく知られたプラットフォームには、Linux / Unix、macOS、Windowsがあり、これらはすべてクロスプラットフォームです。[4]アプリケーションは、特定のプラットフォーム (それが実行されるハードウェア、OS、または仮想マシン(VM) のいずれか) の機能に依存するように記述できます。たとえば、Java プラットフォームは、多くの OS やハードウェア タイプで実行される一般的な VM プラットフォームです。
ハードウェア
ハードウェア プラットフォームは、命令セット アーキテクチャを指します。たとえば、ARM または x86 アーキテクチャです。これらのマシンは、さまざまなオペレーティング システムを実行できます。
スマートフォンやタブレットは一般的に ARM アーキテクチャを採用しており、Android や iOS などのモバイル オペレーティング システムを採用していることが多いです。
ソフトウェア
ソフトウェアプラットフォームは、オペレーティング システム(OS) またはプログラミング環境のいずれかですが、通常は両方の組み合わせです。例外はJavaで、OS に依存しない仮想マシン(VM) を使用してJava バイトコードを実行します。ソフトウェア プラットフォームには次のようなものがあります。
- アンドロイド(ARM64)
- ChromeOS (ARM32、ARM64、IA-32、x86-64)
- Microsoftによる共通言語インフラストラクチャ(CLI) は、次の言語で実装されています。
- Microsoft Windows でのみ動作するレガシー.NET Framework 。
- Microsoft Windows、macOS、Linux で動作する新しい.NETフレームワーク (単に「.NET」と呼ばれます)。
- Mono(旧NovellとXamarin [5])などの他の実装
- HarmonyOS (ARM64、RISC-V、x86、x64、LoongArch)
- iOS ((ARMv8-A))
- iPadOS (ARMv8-A)
- ジャワ
- Linux (Alpha、ARC、ARM、C-Sky、Hexagon、LoongArch、m68k、Microblaze、MIPS、Nios II、OpenRISC、PA-RISC、PowerPC、RISC-V、s390、SuperH、SPARC、x86、Xtensa)
- macOS x86、ARM(Appleシリコン)
- Microsoft Windows (IA-32、x86-64、ARM、ARM64)
- PlayStation 4 (x86)、PlayStation 3 (PowerPC)、PlayStation Vita (ARM)
- Solaris (SPARC、x86)
- スパーク
- Unix (1969 年以降の多くのプラットフォーム)
- ウェブブラウザ– ほとんどが互換性があり、JavaScriptウェブアプリを実行します。
- Xbox
- マイナー、歴史的
- AmigaOS (m68k)、AmigaOS 4 (PowerPC)、AROS (x86、PowerPC、m68k)、MorphOS (PowerPC)
- アタリTOS、MiNT
- BSD (多くのプラットフォーム。例えばNetBSDnetを参照)
- x86 上のDOS型システム: MS-DOS、PC DOS、DR-DOS、FreeDOS
- OS/2、eComStation
- BeOS (PowerPC、x86)
ジャワ
Java言語は通常、Java プラットフォームの一部である VM 上で実行するようにコンパイルされます。Java仮想マシン(Java VM、JVM) はソフトウェアに実装された CPU であり、すべての Java コードを実行します。これにより、JVM を実装するすべてのシステムで同じコードを実行できます。Java ソフトウェアは、ハードウェア ベースのJava プロセッサで実行できます。これは主に組み込みシステムで使用されます。
JVM で実行される Java コードは、適切な権限が付与されていれば、ディスク入出力(I/O) やネットワーク アクセスなどの OS 関連サービスにアクセスできます。JVM は Java アプリケーションに代わってシステム コールを実行します。これにより、ユーザーはアクセス制御リスト(ACL) に応じて適切な保護レベルを決定できます。たとえば、ディスク アクセスとネットワーク アクセスは通常、デスクトップ アプリケーションでは有効になっていますが、ブラウザ ベースのアプレットでは有効になっていません。Java Native Interface (JNI) を使用して OS 固有の機能にアクセスすることもできますが、移植性は失われます。
現在、Java Standard Edition ソフトウェアは、Microsoft Windows、macOS、いくつかの Unix 系 OS、および組み込みデバイス用のいくつかのリアルタイム オペレーティング システムで実行できます。モバイル アプリケーションの場合、Windows および Mac ベースのデバイスではブラウザー プラグインが使用され、Android には Java のサポートが組み込まれています。また、リソースが制限されたデバイス向けに設計されたJava CardやJava Platform, Micro Editionなどの Java のサブセットもあります。
実装
ソフトウェアがクロスプラットフォームと見なされるには、複数のコンピュータ アーキテクチャまたは OS で機能する必要があります。OS によってアプリケーション プログラミング インターフェイス(API)が異なるため、このようなソフトウェアの開発には時間がかかる場合があります。
ある OS 用に作成されたソフトウェアは、その OS がサポートするすべてのアーキテクチャで自動的に動作するとは限りません。ソフトウェアがCやC++などの一般的なプログラミング言語で作成されているからといって、その言語をサポートするすべての OS で動作するわけではありません。同じ OS の異なるバージョンでも動作するとは限りません。
ウェブアプリケーション
Web アプリケーションは、理想的にはどのWeb ブラウザからでもアクセスできるため、一般的にクロスプラットフォームと呼ばれます。ブラウザがプラットフォームです。Web アプリケーションは一般にクライアント/サーバー モデルを採用していますが、複雑さと機能は大きく異なります。機能に対する要望と互換性の必要性を両立させることは難しい場合があります。
基本的な Web アプリケーションは、ステートレス サーバーからすべてまたはほとんどの処理を実行し、その結果をクライアントの Web ブラウザーに渡します。アプリケーションとユーザーとのやり取りはすべて、データ要求とサーバー応答の単純な交換で構成されます。このタイプのアプリケーションは、World Wide Webアプリケーション開発の初期段階では標準でした。このようなアプリケーションは、静的 Web ページを提供するのと同じ単純なトランザクションモデルに従います。今日でも、特に高度な機能よりもクロスプラットフォームの互換性とシンプルさが重要と見なされる場合は、比較的一般的です。
高度な Web アプリケーションの代表的な例としては、 Gmailや Google マップの Web インターフェースが挙げられます。このようなアプリケーションは、一般的な Web ブラウザの最新バージョンにのみ搭載されている追加機能に日常的に依存しています。これらの機能には、Ajax、JavaScript、Dynamic HTML、SVG、その他のリッチ Web アプリケーションのコンポーネントが含まれます。
デザイン
互換性と機能性の競合する利益のために、さまざまな設計戦略が生まれました。
多くのソフトウェア システムでは、プラットフォームに依存するコードが最上位層と最下位層に制限される階層化アーキテクチャが使用されています。
優雅な退化
グレースフル デグラデーションでは、すべてのユーザーとプラットフォームに同じまたは同様の機能を提供しながら、より制限されたクライアント ブラウザーに対しては、その機能を最小公分母まで縮小しようとします。たとえば、機能が制限されたブラウザーを使用して Gmail にアクセスしようとするユーザーは、Gmail が基本モードに切り替わり、機能が制限されるものの、まだ使用できることに気付く場合があります。
複数のコードベース
一部のソフトウェアは、同等の機能を持つ異なる (ハードウェアおよび OS) プラットフォーム用の別個のコードベースで保守されています。この場合、コードの保守により多くの労力が必要になりますが、プラットフォーム固有のコード量が多い場合には価値があります。
単一のコードベース
この戦略は、複数のプラットフォーム固有の形式にコンパイルできる 1 つのコードベースを持つことに依存しています。1 つの手法は条件付きコンパイルです。この手法では、すべてのプラットフォームに共通するコードは繰り返されません。特定のプラットフォームにのみ関連するコード ブロックは条件付きにされ、必要な場合にのみ解釈またはコンパイルされます。もう 1 つの手法は機能の分離です。これは、ブラウザーや OS でサポートされていない機能を無効にしながら、完全なアプリケーションをユーザーに提供します。(「関心の分離」も参照) この手法は、解釈されたコード (スクリプト言語など) が実行中のプラットフォームを照会して、条件に応じてさまざまなブロックを実行できる Web 開発で使用されます。[6]
サードパーティライブラリ
サードパーティのライブラリは、ベンダー ロックインを犠牲にして、クライアント差別化の複雑さを単一の統合 API の背後に隠すことで、クロスプラットフォーム機能を簡素化しようとします。
レスポンシブウェブデザイン
レスポンシブ Web デザイン(RWD) は、モバイル フォンからデスクトップ コンピューターのモニターまで、さまざまなデバイスで、最小限のサイズ変更、パン、スクロールで簡単に読み、ナビゲートできる最適な表示エクスペリエンスを提供するために、サイトの視覚的なレイアウトを作成することを目的とした Web デザイン手法です。この手法では、プラットフォーム固有のコードはほとんどまたはまったく使用されません。
テスト
クロスプラットフォームアプリケーションでは、より多くの統合テストが必要です。一部のWebブラウザでは、同じマシンに異なるバージョンをインストールすることが禁止されています。複数のプラットフォームをターゲットにするために使用されるアプローチはいくつかありますが、そのすべては、テストとメンテナンスに多大な手作業を必要とするソフトウェアになります。[7]この問題の回避策として、完全仮想化などの手法が使用されることがあります。
Page Object Model などのツールを使用すると、クロスプラットフォーム テストをスクリプト化して、1 つのテスト ケースでアプリの複数のバージョンをカバーできます。異なるバージョンのユーザー インターフェイスが類似している場合は、1 つのテスト ケースですべてをテストできます。
従来のアプリケーション
Web アプリケーションはますます普及していますが、多くのコンピュータ ユーザーは依然として、クライアント/Web サーバー アーキテクチャに依存しない従来のアプリケーション ソフトウェアを使用しています。従来のアプリケーションと Web アプリケーションの区別は必ずしも明確ではありません。Web アプリケーションと従来のアプリケーションの機能、インストール方法、アーキテクチャは重複しており、区別があいまいになっています。ただし、この単純な区別は一般的で便利な一般化です。
バイナリソフトウェア
従来のアプリケーション ソフトウェアは、バイナリ ファイル、特に実行可能ファイルとして配布されてきました。実行可能ファイルは、その対象として構築されたプラットフォームのみをサポートします。つまり、単一のクロスプラットフォーム実行可能ファイルは、特定のプラットフォームでは決して実行されないコードで非常に肥大化する可能性があります。代わりに、通常は、それぞれが 1 つのプラットフォーム用に構築された複数の実行可能ファイルがあります。
C や C++ で書かれたバイナリ実行可能ファイルとして配布されるソフトウェアの場合、単一のコードベースを複数のバイナリ実行可能ファイルに変換 (トランスコンパイル) するツールセットを使用して、各プラットフォーム用のソフトウェア ビルドが必要です。たとえば、オープンソースの Web ブラウザーであるFirefox は、複数のコンピューター アーキテクチャー上の Windows、macOS ( Apple 社がユニバーサル バイナリと呼ぶものを介してPowerPCと x86 の両方)、Linux、および BSD で利用できます。4 つのプラットフォーム (この場合は Windows、macOS、Linux、および BSD) は、大部分が同じソース コードから作成されていますが、別々の実行可能ファイルの配布です。まれに、複数のプラットフォーム用にビルドされた実行可能コードが、ファット バイナリと呼ばれる単一の実行可能ファイルに結合されることがあります。
異なるツールセットを使用するだけでは、異なるプラットフォームで動作する実行ファイルを作成するのに十分ではない場合があります。この場合、プログラマーはソース コードを新しいプラットフォームに移植する必要があります。たとえば、x86 ファミリの Windows で既に実行されている Firefox などのアプリケーションは、x86 (および他のアーキテクチャの可能性もある) の Linux でも実行できるように変更して再構築できます。コードの複数のバージョンは、個別のコードベースとして保存することも、1 つのコードベースに統合することもできます。
移植の代替として、クロスプラットフォーム仮想化があります。クロスプラットフォーム仮想化では、あるプラットフォーム用にコンパイルされたアプリケーションを、ソースコードやバイナリを変更することなく別のプラットフォームで実行できます。たとえば、Intelベースの Macintosh コンピューターに組み込まれている Apple のRosetta は、PowerPC CPU を使用した前世代の Mac 用にコンパイルされたアプリケーションを実行します。別の例としては、IBM PowerVM Lx86があります。これにより、Linux/x86 アプリケーションを Linux/Power OS 上で変更せずに実行できます。
クロスプラットフォームバイナリソフトウェアの例:
- LibreOfficeオフィススイートは、Microsoft Windows、macOS、Linux、FreeBSD、NetBSD、OpenBSD、Android、iOS、iPadOS、ChromeOS 、ウェブベースのCollabora Onlineなど向けに構築されています。[8] [9]これらの多くは、 IA-32、x86-64、ARM(ARMel、ARMhf、ARM64)、MIPS、MIPSel、PowerPC、ppc64le、S390xなどのプロセッサアーキテクチャを備えた複数のハードウェアプラットフォームでサポートされています[9] [10]
スクリプトとインタプリタ言語
スクリプトのインタープリタが複数のプラットフォームで使用可能であり、スクリプトが言語に組み込まれている機能のみを使用する場合、スクリプトはクロスプラットフォームであると考えられます。たとえば、 Unix 系システム用にPythonで記述されたスクリプトは、Windows でもほとんどまたはまったく変更せずに実行できる可能性があります。これは、Python が Windows でも実行できるためです。実際、多くの実装があります (例: .NET Framework用のIronPython )。同じことは、多くのオープンソーススクリプト言語にも当てはまります。
バイナリ実行ファイルとは異なり、スクリプトを解釈するソフトウェアを備えたすべてのコンピューターで同じスクリプトを使用できます。これは、スクリプトが通常、テキスト ファイル内にプレーン テキストで保存されるためです。改行文字の表現など、いくつかの些細な問題が発生する可能性があります。
人気のあるクロスプラットフォーム スクリプト言語は次のとおりです。
- bash – Linux やその他の最新の Unix ライクなシステムで一般的に実行されるUnix シェル。また、Cygwin POSIX互換レイヤー、Git for Windows、またはWindows Subsystem for Linuxを介して Windows でも実行されます。
- Perl – 1987 年に初めてリリースされました。CGI プログラミング、小規模なシステム管理タスクなどに使用されます。
- PHP – 主に Web アプリケーションに使用されます。
- Python –実行時の効率ではなく、迅速なアプリケーション開発と記述の容易さに重点を置いた言語。
- Ruby – 読みやすさを追求したオブジェクト指向言語。Ruby on Railsを通じて Web でも使用できます。
- Tcl – Web およびデスクトップ アプリケーション、ネットワーク、管理、テストなど、幅広い用途に適した動的プログラミング言語です。
ビデオゲーム
クロスプラットフォームまたはマルチプラットフォームという用語は、さまざまなビデオゲームコンソールでリリースされるビデオゲームにも適用できます。クロスプラットフォームゲームの例としては、 Miner 2049er、Tomb Raider: Legend、FIFA シリーズ、NHL シリーズ、Minecraftなどがあります。
それぞれ、 Wii、PlayStation 3、Xbox 360、パソコン、モバイルデバイスなど、さまざまなゲームプラットフォームでリリースされています。
一部のプラットフォームは他のプラットフォームよりも開発が難しく、同じ基準でビデオ ゲームを開発するにはより多くの時間が必要です。これを補うために、ビデオ ゲームは最初にいくつかのプラットフォームでリリースされ、その後他のプラットフォームでリリースされることがあります。通常、これは新しいゲーム システムがリリースされたときに行われます。ビデオ ゲーム開発者は、そのハードウェアとソフトウェアに精通する必要があるためです。
一部のゲームは、開発者とビデオゲームコンソールメーカー間のライセンス契約により開発が特定のコンソールに限定されているため、クロスプラットフォームではない場合があります。たとえば、ディズニーは最新の任天堂およびソニーのゲームコンソールでリリースすることを意図してゲームを作成する場合があります。ディズニーが最初にソニーからゲームのライセンスを取得した場合、短期間または無期限にソニーのコンソールでのみゲームをリリースすることが求められる場合があります。
クロスプラットフォームプレイ
いくつかの開発者は、異なるプラットフォームを使用してオンラインでゲームをプレイする方法を実装しています。Psyonix、Epic Games、Microsoft、Valve はすべて、Xbox 360 および PlayStation 3 のゲーマーが PC ゲーマーとプレイできる技術を所有しており、どのプラットフォームを使用するかは消費者に委ねられています。 PC とコンソールゲーム (特別に製造されたキーボードとマウスを備えた Dreamcast) 間でこのレベルの対話性を可能にした最初のゲームは、Quake 3でした。[11] [12]
クロスプラットフォームのオンラインプレイを特徴とするゲームには、 Rocket League、Final Fantasy XIV、Street Fighter V、Killer Instinct、Paragon、Fable Fortune、Windows 10、VR エディション、Pocket Edition、Xbox Oneでの Better Together アップデートを適用したMinecraft などがあります。
プログラミング
クロスプラットフォーム プログラミングとは、複数のプラットフォームで動作するようにソフトウェアを意図的に作成することです。
アプローチ
クロスプラットフォーム アプリケーションを作成するには、さまざまな方法があります。 1 つの方法は、異なるソース ツリーに同じソフトウェアの複数のバージョンを作成することです。つまり、アプリケーションの Microsoft Windows バージョンには 1 セットのソース コード ファイルがあり、Macintoshバージョンには別のセットがあり、FOSS *nixシステムには 3 つ目のセットがある可能性があります。 これは簡単ですが、1 つのプラットフォームのみの開発と比較すると、大規模なチームに支払う費用がはるかに高くなったり、製品のリリースが遅くなったりする可能性があります。 また、追跡して修正する必要があるバグが増える可能性もあります。
もう 1 つのアプローチは、プラットフォーム間の違いを隠すソフトウェアを使用することです。この抽象化レイヤーは、アプリケーションをプラットフォームから分離します。このようなアプリケーションはプラットフォームに依存しません。JVM 上で実行されるアプリケーションは、このように構築されます。
アプリケーションによっては、クロスプラットフォーム プログラミングのさまざまな手法を組み合わせて最終的なアプリケーションを作成するものもあります。たとえば、Firefox Web ブラウザーは、抽象化を使用して一部の低レベル コンポーネントを構築し、プラットフォーム固有の機能 (GUI など) を実装するための個別のソース サブツリーと、ソフトウェアの移植性を容易にするための複数のスクリプト言語の実装を使用しています。Firefox は、ブラウザーを拡張するためのXUL、CSS、JavaScript に加えて、従来のNetscapeスタイルのブラウザー プラグインを実装しています。ブラウザー自体の大部分は、XUL、CSS、JavaScript で記述されています。
ツールキットと環境
クロスプラットフォームプログラミングのプロセスを支援する ツールは数多くあります[13] [14] 。
- 8番目: JuceをGUIレイヤーとして利用する開発言語。現在、Android、iOS、Windows、macOS、Linux、Raspberry Piをサポートしています。
- Anant Computing: キーボードを含むすべてのインド言語で動作し、すべての OS で AppWallet とネイティブ パフォーマンスをサポートするモバイル アプリケーション プラットフォームです。
- AppearIQ: エンタープライズ環境でのアプリ開発と展開のワークフローをサポートするフレームワーク。ネイティブに開発されたコンテナーは、モバイル デバイスまたはタブレットのハードウェア機能を API を通じて HTML5 コードに提示し、さまざまなプラットフォームで実行されるモバイル アプリの開発を容易にします。
- Boden: 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 に制限されているため、より軽量です。
- Flutter : Googleが開発した Android および iOS 向けのクロスプラットフォーム UI フレームワーク。
- fpGUI : Object Pascal で完全に実装されたオープンソースのウィジェット ツールキット。現在、Linux、Windows、および一部の Windows CE をサポートしています。
- GeneXus :知識表現に基づいてクロスプラットフォーム アプリケーションを作成および展開するための Windows の迅速なソフトウェア開発ソリューションであり、 C#、COBOL、Android および BlackBerry スマート デバイスを含むJava 、 Appleモバイル デバイス用のObjective-C 、 RPG、Ruby、Visual Basic、およびVisual FoxProをサポートします。
- GLBasic : C++ コードを生成する BASIC 方言およびコンパイラ。多くのプラットフォーム用のクロス コンパイラが含まれており、多数のプラットフォーム (Windows、Mac、Linux、Android、iOS、一部の特殊なハンドヘルド) をサポートしています。
- Godot : Godot Engine を使用する SDK。
- GTK +: X11 と Microsoft Windows を搭載した Unix ライクなシステム用のオープン ソース ウィジェット ツールキット。
- Haxe : オープンソース言語。
- Juce : C++ で記述されたアプリケーション フレームワーク。コードを変更することなく、さまざまなシステム (Microsoft Windows、POSIX、macOS) でネイティブ ソフトウェアを記述するために使用されます。
- Kivy : Pythonで書かれたオープンソースのクロスプラットフォーム UI フレームワーク。Android、iOS、Linux、OS X、Windows、Raspberry Piをサポートしています。
- LEADTOOLS: 認識、ドキュメント、医療、画像、マルチメディア技術をWindows、iOS、macOS、Android、Linux、Webアプリケーションに統合するためのクロスプラットフォームSDKライブラリ。[15]
- LiveCode : HyperTalk にヒントを得た商用のクロスプラットフォーム高速アプリケーション開発言語。
- Lazarus : FreePascal コンパイラ用のプログラミング環境。自立型グラフィカル アプリケーションおよびコンソール アプリケーションの作成をサポートし、Linux、MacOSX、iOS、Android、WinCE、Windows、WEB で動作します。
- Max/MSP :プラットフォームに依存しないコードをプラットフォーム固有のランタイム環境でカプセル化し、macOS および Windows 用のアプリケーションに組み込むビジュアルプログラミング言語。クロスプラットフォームの Android ランタイム。変更されていない Android アプリを iOS および macOS でネイティブに実行できます。
- Mendix : クラウドベースのローコード アプリケーション開発プラットフォーム。
- MonoCross:オープンソースのモデル・ビュー・コントローラ設計パターン。モデルとコントローラはクロスプラットフォームだが、ビューはプラットフォーム固有である。[16]
- Mono : Microsoft .NET (アプリケーションとプログラミング言語のフレームワーク)のオープンソース クロスプラットフォーム バージョン
- MoSync : C++ ファミリーのモバイル プラットフォーム アプリ開発用のオープン ソース SDK。
- Mozilla アプリケーション フレームワーク: macOS、Windows、Linux アプリケーションを構築するためのオープン ソース プラットフォーム。
- OpenGL : 3D グラフィックス ライブラリ。
- Pixel Game Maker MV : Windows およびNintendo Switchゲームを開発するための Windows 専用の 2D ゲーム開発ソフトウェア。
- PureBasic : macOS、Windows、Linux アプリケーションを構築するための独自の言語および IDE。
- ReNative: React Native を使用してマルチプラットフォーム プロジェクトを構築するためのユニバーサル開発 SDK。最新の iOS、tvOS、Android、Android TV、Web、Tizen TV、Tizen Watch、LG webOS、macOS/OSX、Windows、KaiOS、Firefox OS、Firefox TV プラットフォームが含まれます。
- Qt : X11 、Microsoft Windows、macOS、およびその他のシステムを備えたUnix 系システム用のアプリケーション フレームワークおよびウィジェット ツールキット。独自のライセンスとオープン ソース ライセンスの両方で利用できます。
- シンプルで高速なマルチメディア ライブラリ:グラフィックス、入力、オーディオなどへの低レベルおよび高レベルのアクセスを提供するマルチメディア C++ API 。
- Simple DirectMedia Layer : C で書かれたオープンソースのマルチメディア ライブラリで、さまざまなプラットフォームのグラフィックス、サウンド、入力APIを抽象化します。Linux、Windows、macOS などの OS で実行され、ゲームやマルチメディア アプリケーションを対象としています。
- Smartface : JavaScript コード エディターを備えたWYSIWYGデザイン エディターを使用して、Android および iOS 用のモバイル アプリケーションを作成するためのネイティブ アプリ開発ツール。
- Tcl / Tk
- Titanium Mobile : Android および iOS 開発用のオープンソース クロスプラットフォーム フレームワーク。
- U++ : パフォーマンスのための C++ GUI フレームワーク。ライブラリ セット (GUI、SQL など) と IDE が含まれています。Windows、macOS、Linux をサポートしています。
- Unity : Unity エンジンを使用する別のクロスプラットフォーム SDK。
- Uno プラットフォーム: C# を使用した Windows、macOS、iOS、Android、WebAssembly、Linux。
- Unreal : Unreal Engine を使用するクロスプラットフォーム SDK。
- V-Play エンジン: V-Play は、人気の Qt フレームワークに基づくクロスプラットフォーム開発 SDK です。V-Play アプリとゲームは Qt Creator 内で作成されます。
- WaveMaker : レスポンシブな Web およびハイブリッド モバイル (Android および iOS) アプリケーションを作成するためのローコード開発ツール。
- WinDev: Windows、Linux、.Net、Java、Web ブラウザー用の統合開発環境。ビジネスおよび産業用アプリケーション向けに最適化されています。
- wxWidgets : オープンソースのウィジェットツールキットであり、アプリケーションフレームワークでもあります。[17] X11、Microsoft Windows、macOSを搭載したUnix系システムで動作します。
- Xojo : オブジェクト指向プログラミング言語を使用してデスクトップ、Web、iOS アプリをコンパイルする RAD IDE。Xojo は、Windows、macOS、iOS、Linux へのネイティブ コンパイルをサポートし、スタンドアロン サーバーとして、または CGI 経由で実行できるコンパイル済み Web アプリを作成することもできます。
課題
クロスプラットフォーム ソフトウェアを開発する際には多くの課題があります。
- クロスプラットフォーム アプリケーションのテストは、異なるプラットフォームではわずかに異なる動作や微妙なバグが発生する可能性があるため、かなり複雑になる可能性があります。この問題により、一部の開発者はクロスプラットフォーム開発を「一度書けばどこでもデバッグ可能」と嘲笑しています。これは、 Sun Microsystemsの「一度書けばどこでも実行可能」というマーケティング スローガンをもじったものです。
- 開発者は、多くの場合、すべてのプラットフォームで利用可能な機能の最低限の共通サブセットの使用に制限されます。これにより、アプリケーションのパフォーマンスが低下したり、開発者が各プラットフォームの最も高度な機能を使用できなくなったりする可能性があります。
- プラットフォームが異なればユーザー インターフェイスの慣例も異なる場合が多く、クロスプラットフォーム アプリケーションは必ずしもそれに適応しているわけではありません。たとえば、macOS およびGNOME用に開発されたアプリケーションでは、最も重要なボタンをウィンドウまたはダイアログの右側に配置することになっていますが、Microsoft Windows およびKDEではその逆の慣例になっています。こうした違いの多くは微妙なものですが、こうした慣例に準拠していないクロスプラットフォーム アプリケーションは、ユーザーにとって使いにくく、違和感がある場合があります。すばやく作業する場合、このような相反する慣例により、変更を保存するか破棄するかを確認するダイアログ ボックスなどでデータが失われることもあります。
- スクリプト言語と VM バイトコードは、使用されるたびにネイティブ実行可能コードに変換される必要があるため、パフォーマンスが低下します。このペナルティは、ジャストインタイム コンパイルなどの手法を使用して軽減できますが、ある程度の計算オーバーヘッドは避けられない可能性があります。
- 異なるプラットフォームでは、 RPMやMSIなどのネイティブ パッケージ形式を使用する必要があります。 InstallAnywhereなどのマルチプラットフォーム インストーラーは、このニーズに対応します。
- クロスプラットフォーム実行環境はクロスプラットフォームのセキュリティ上の欠陥に悩まされる可能性があり、クロスプラットフォームマルウェアが蔓延する環境を作り出します。[18]
参照
- クロスプラットフォームプレイ
- ハードウェアに依存しない
- ソフトウェアの移植性
- クロスプラットフォームプレイをサポートするビデオゲームのリスト
- ウィジェットツールキットのリスト
- ハードウェア仮想化
- Java (ソフトウェア プラットフォーム)
- 言語バインディング
- ソースツーソースコンパイラ
- バイナリコード互換性
- ザマリン
- メッセージングプラットフォームのユーザー機能の比較
- モバイル開発フレームワーク。その多くはクロスプラットフォームです。
参考文献
- ^ 「設計ガイドライン: 用語集」。java.sun.com。2012 年 2 月 13 日時点のオリジナルよりアーカイブ。2011 年 10 月 19 日閲覧。
- ^ 「SDD Technology ブログ: クロスプラットフォームの定義」。SDD Technology。2020年 10 月 18 日閲覧。
- ^ Lee P Richardson (2016-02-16). 「Xamarin vs Ionic: モバイル、クロスプラットフォーム、対決」
- ^ ab 「プラットフォーム定義」。Linux情報プロジェクト。 2014年3月27日閲覧。
- ^ 「Monoについて」 mono-project.com . 2015年12月17日閲覧。
- ^ Corti, Sascha P. (2011 年 10 月)。「ブラウザーと機能の検出」。MSDN マガジン。2014年1 月 28 日閲覧。
- ^ Choudhary, SR (2014). 「Web およびモバイル アプリケーション のクロスプラットフォーム テストとメンテナンス」。第 36 回国際ソフトウェア工学会議のコンパニオン プロシーディング。pp. 642–645。doi : 10.1145 / 2591062.2591097。hdl : 1853 /53588。ISBN 9781450327688.S2CID 1903037 。
- ^ Mehrotra, Pranob (2020-12-01). 「Collabora Office スイートが Android タブレットと Chromebook 向けに新しいレイアウトを採用」XDA-Developers . 2021-01-15閲覧。Collabora
Office は、Microsoft Office スイートに代わる人気のオープンソース製品です。LibreOffice をベースにしており、Windows、Linux、iOS、Android など、さまざまなプラットフォームで利用できます。今年 7 月、このオフィス スイートのメジャー アップデートにより、Chrome OS デバイスのサポートが導入されました。
- ^ 「iOS および Android の Collabora Office がさらに便利になりました!」。Adfinis。2020年 12 月 15 日。2021年 1 月 15 日閲覧。...
タッチに最適化されたインターフェース: タブレット用とスマートフォン画面用に 1 つずつ。...(iOS、iPadOS、Chromebook、Android)。
- ^ 「Nextcloud Ubuntu Appliance が Raspberry Pi イメージに Collabora Online を追加」。MuyLinux。2021年 3 月 26 日。2021年 3 月 30 日閲覧。
人気の Raspberry Pi 4 プラットフォーム向けの初の実用的なセルフホスト型 Web オフィス ソリューション
- ^ Cribba. Quake III Arena、Giant Bombcast、2013年2月15日。
- ^ ドリームキャスト インターネット スターター キットの詳細
- ^ GUI ツールキット、フレームワーク ページ
- ^ 「プラットフォームに依存しない FAQ」。2008 年 8 月 16 日時点のオリジナルよりアーカイブ。2009 年 4 月 25 日閲覧。
- ^ 「認識、ドキュメント、医療、イメージング、マルチメディア向けのクロスプラットフォーム SDK ライブラリ」www.leadtools.com 。 2021 年 3 月 3 日閲覧。
- ^ 「Xamarin クロスプラットフォーム アプリ開発の 12 のメリット」。HeadWorks。2019年 3 月 15 日。
- ^ WxWidgets の説明
- ^ Warren, Tom (2020-01-14). 「Microsoft が Windows 7 と、それがまだ稼働している何百万台もの PC に別れを告げる」The Verge . 2020-02-06閲覧。