この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。コンピュータにおいて、移植(いしょく、英: porting)とは、あるプラットフォームで動作するソフトウェアを改変して、ハードウェアやオペレーティングシステム (OS)、ライブラリなどの環境が異なる別のプラットフォームでも動作するように作り変えることを指す。 様々な設計思想に基づいたコンピュータが、様々なメーカーから発売されており、またそれらのコンピュータ上で動作するプログラムを記述するためのプログラミング言語も多岐に渡っている。移植性は、OS自体の違いというよりも、システムコールやコマンドなどの違い(例えばLinux、GNU Hurd、FreeBSD、macOS、Plan 9などのPOSIX、およびそれ以外)、CPUおよび命令セット(機械語)の違い (ARM, x86, x64)、拡張命令、ビット長(8ビット、16ビット、32ビット、64ビット、128ビット、256ビットなど)、ネットワークアダプターやストレージ、グラフィックスカード(GPU)やサウンドカードといった周辺機器のデバイスドライバサポート状況、そして利用できるライブラリの違いに左右される。例えば、同じPOSIXのGNU/Linux, FreeBSD, macOS間の移植性は比較的高い。またWin32 APIを備えるMicrosoft Windowsシリーズ間の移植性も比較的高い。 互換性のあるコンピュータ上では、OSに用意されたAPIや、そのAPI経由で利用されているデバイスドライバの働きによって、ハードウェアのベンダーや機種の違いが隠蔽され、ハードウェア仕様の差異やデバイス構成の違いなどは気にせずとも同じアプリケーションソフトウェアの実行ファイル(バイナリ)が利用できる。アプリケーションソフトウェアは、OSが提供する標準化・抽象化された環境上で動作する。 しかし、WindowsとMacintoshシリーズなどのように、互換性のないコンピュータ上では、一部のソフトウェアを除き、同じ実行バイナリは動作しない。これらはOS側で提供している環境が異なるためである。また、OSによってサポートされる第一級(ファーストクラス)のプログラミング言語が異なることもあり、特にウィジェット・ツールキットを利用するGUIアプリケーションの移植に際して、それぞれの言語を使用してソフトウェアの一部またはすべてを書き直さなければならないこともある。例えばMac/iOSではObjective-C/Swiftが、AndroidではJava/Kotlinが、WindowsではC++/C#/VB.NETが主要な第一級言語としてサポートされ、公式のウィジェット・ツールキットはそれぞれの第一級言語から利用することを想定されている。 プラットフォームごとにソフトウェアを記述するのではなく、クロスプラットフォームなアプリケーションフレームワークを利用して、移植性やメンテナンス性を高める手法が採られることも多い。また、移植性を高めるために、プラットフォームやプロセッサ命令セットを抽象化した仮想マシンや中間表現が利用されることもある。オラクル(旧サン・マイクロシステムズ)のJavaは、プラットフォームに依存しない仮想的な実行環境 (Java Runtime Environment, JRE) を定義し、その仮想環境上で動作する仮想マシン (Java VM) とクロスプラットフォームなクラスライブラリ (Java API) を用意することで、JREをサポートする環境であれば一度書いたアプリケーションプログラムを変更することなくそのまま実行できるエコシステムを構築し、一定の成功を収めている。 OpenGLやOpenCLなどのように、標準化されたAPIのオープン規格も存在する。これらのAPIをサポートするプラットフォーム間では、ソフトウェアの移植がしやすくなるが、実際のAPIの実装であるデバイスドライバの品質や規格への準拠レベルは、個々のベンダーによってまちまちである。 旧来、特に動作環境が異なるコンピュータの多くでは、同じ動作・作業をさせるために、全く別々にプログラムを作成しなければならない場合もあり、ハードウェア構成の差異を吸収してくれるOSやデバイスドライバが無かった時代には、たとえ同一メーカーのコンピュータであっても、機種が異なる場合はプログラムの大半を作り直す作業が必要とされることがあった。 このため、特にPCが普及し始めていた1980年代においては、各ソフトウェアメーカーとも、採算性の上でシェアが狭い機種など、売上が見込めない機種にはソフトウェアの移植を行わないケースも見られた。その一方で、採算さえ取れそうなら、非常に性能の低いPC向けにでさえ、ソフトウェアメーカーは多大なプログラミングテクニックと試行錯誤という労力を費やしてでも、移植ソフトウェアを作り続けた。その結果、日本のPC市場は1980年代末には8ビット御三家と呼ばれる三強と、様々なメーカーからの互換性のあるMSXシリーズによる寡占化傾向が定着していた。 一方情報工学分野でも、様々なコンピュータメーカーから、多種多様な大型・小型を問わず1970年代以降、様々なコンピュータが発売・供給されたが、プラットフォームごとに操作方法が大きく違うことに@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}辟易する利用者も多かった[要出典]。そのような中、マルチユーザー・マルチタスクの思想から生まれたUNIXは広く産官学分野に受け入れられ、様々なコンピュータ上で動作するUNIXの流れを汲むOSが移植された。 また、家庭にあるPC上でも同じOSを使いたいというユーザーもあらわれ、LinuxやFreeBSD等の、PC/AT互換機上で動作するものも開発されてきた。特にLinuxに関しては、家庭用ゲーム機や携帯機器あるいは過去のコンピュータハードウェア等で動作させることが、一部のマニア間で腕試しに競われた結果、Xboxやプレイステーション上でも動作する環境が開発されている[要出典]。 2010年代には、いずれのプラットフォームに対しても同時に同質のアプリケーションを展開することは一般的になっている。ただし限界もあり、たとえばPC向けのアプリケーションをスマートフォンやタブレットデバイス向けにそのまま移植することは、解像度や操作体系(マウスおよびキーボードあるいはタッチスクリーン)などの違いから困難あるいは不可能だが、PCおよびタブレットなどの異なるデバイス間で、Windowsアプリケーションを移植しやすくする開発・実行環境として、Microsoft Windows 8以降にはWindowsランタイムと呼ばれるAPIが搭載されており、Microsoft Windows 8.1およびMicrosoft Windows 10では移植性に関する改善も続けられている[1][2]。 かつて、コンピュータゲームのゲームソフトは通常1種類のゲーム機(ゲームコンソール)にのみ独占的に対応して開発・販売されることが多く、移植といえば主に(高性能な)アーケード機から(低性能な)家庭用ゲーム機への移植を指すことがほとんどだった。しかし、Xbox 360/PlayStation 3/Wiiといった高性能なコンソールが出現する頃には、最初から複数のプラットフォームで製品販売を展開することを視野に入れて開発されることも多くなっている。他機種に同一内容のゲームソフトを提供するためにはソフトウェア開発メーカー、または外注ないしライセンス提供を受けた別のソフトウェア開発企業(サードパーティー)による移植作業が必要である。
概要
移植の歴史
コンピュータゲームの移植
Size:27 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef