Monoとは
Monoは、GNOME
プロジェクトの創設者であるミゲル・デ・イカザ氏によって開発された、ECMA標準に準拠した
.NET Framework互換環境を実現するためのオープンソース
ソフトウェア群であり、
プロジェクト名でもあります。現在、開発、販売、サポートは
マイクロソフトの
子会社である
Xamarinと
.NET Foundationが行っています。
Monoは、共通言語基盤 (CLI) の実装やC#
コンパイラなどを含み、様々なプラットフォーム上で動作します。
対応プラットフォーム
Monoはマルチプラットフォームに対応しており、
Linux、macOS、iOS、tvOS、watchOS、Android、
Solaris、IBM
AIX/IBM i、BSD (OpenBSD, FreeBSD,
NetBSD)、Windows、
PlayStation 4|PlayStation_4、
Xbox One、
Xbox Series X/S|Xbox Series X_Sなど、幅広い環境で動作します。また、特定プラットフォーム向けのサブ
プロジェクトも存在します。
Xamarin.iOS: iOSデバイス向けのAPIやGUIツールキットを.NET向けにラップします。
Xamarin.Mac: macOSへのネイティブ対応を実現します。
Xamarin.Android: Android向けの環境を提供します。
これらの技術により、各プラットフォームの特性を活かしたアプリケーション開発が可能になっています。
マイクロソフトは、以前にFreeBSD、Windows、Mac OS Xで動作するシェアードソースCLIを公開しましたが、商用利用が制限されていました。Monoプロジェクトは、この課題を解決し、より自由な環境での開発を可能にすることを目指しました。マイクロソフトがMITライセンスで.NET Coreをリリースしたことで、SSCLIは存在意義を失いましたが、Monoには.NET Coreの技術が取り込まれるなど、ポジティブな影響も生まれています。
プロジェクトの主導者であるミゲル・デ・イカザ氏は、「Cでプログラミングするには人生は短すぎる」という言葉を標語として掲げており、開発効率の向上に対する強い思いが込められています。
Monoランタイム
Monoランタイムは、多くのプロセッサに対応するJITコンパイラを搭載しており、アプリケーションの実行中に共通中間言語 (CIL) コードをネイティブコードに変換してキャッシュします。また、事前にネイティブコードに変換してキャッシュすることも可能です。JITコンパイラはx86、x86-64、IA-64、SPARC、PowerPC、ARM、S/390(32ビットおよび64ビット)、MIPSなどのプロセッサに対応しています。JITコンパイラに対応しないシステムでは、インタプリタがバイトコードを逐次実行します。一般的に、JITコンパイラはインタプリタよりもパフォーマンスが高いとされています。
さらに、SIMDへの独自対応 (Mono.Simd) など、独自の革新的な機能も積極的に取り込まれています。マイクロソフトの.NET Frameworkでも、Monoを追う形でSIMDサポートが追加されました。
Monoの歴史
2000年12月に.NETドキュメントが公開されたことをきっかけに、ミゲル・デ・イカザ氏は.NET技術に興味を持ちました。彼はバイトコードインタプリタを調査する中で、メタデータに関する仕様が不足していることに気づきました。その後、情報公開を求めると同時に、C#の習得を兼ねてC#で書かれたC#コンパイラを開発しました。Ecma Internationalが不足していたファイル形式を公開すると、デ・イカザ氏は自身が開発したコンパイラのデモンストレーションを行いました。
Ximian(後のノベルに買収)では、生産性向上ツールの開発が検討され、実現可能性の調査の結果、Monoチームが結成されました。しかし、社内だけでは.NETと同等のものを作るには人材が不足していたため、Monoをオープンソースプロジェクトとして公開しました。これは2001年7月19日に発表されました。
その後、約3年間の開発期間を経て、2004年6月30日にMono 1.0がリリースされました。
主なリリース:
2009年12月: Mono 2.6リリース(WCF、
LLVMサポート)
Mono 2.8: C# 4.0サポート
Mono 2.8.1: Shift_JISサポート
Mono 3.0.0: C# 5.0サポート (async/await)
Mono 4.0.0: C# 6.0サポート、
.NET Core
コンポーネント置き換え
Mono 5.0.0: C# 7.0サポート、Roslyn C#コンパイラ追加
Mono 5.2.0: .NET Standard 2.0サポート、デフォルト64ビット動作
Mono 5.10.0: .NET 4.7.1, C# 7.2, F# 4.1対応
Mono 5.12.0: IBM
AIXとIBM i対応、RoslynベースのVB
.NETコンパイラ追加
Monoは
スペイン語で猿を意味し、ロゴにも猿が描かれています。この名称は、Ximianの他の
プロジェクトにも見られます。Mono FAQでは、名称の由来について「我々は猿が好きです」と回答しています。
Monoは主に3つの
コンポーネントで構成されています。
1.
中核コンポーネント: C#
コンパイラ、
仮想機械、基本クラスライブラリなど、Ecma-334およびEcma-335の標準に準拠したもので構成されています。
2.
Mono/Linux/GNOME開発スタック: GNOMEや他のフリー
ソフトウェアライブラリを活用するためのツール群です。Gtk#、Gnome#、WebBrowser、
Gecko#、
WebKit#などが含まれます。Gtk#やGnome#を用いることで、MonoアプリケーションをGNOMEデスクトップに統合でき、MonoDevelopを用いることで、Visual Studioと同様のRAD開発が可能です。
データベース接続や
UNIX統合、セキュリティなど、汎用的なライブラリも豊富です。
3.
マイクロソフト互換スタック: Windowsの
.NETアプリケーションを他のOSで利用するための機能を提供します。ADO
.NET、ASP
.NET、Windows Formsなどの実装が含まれています。ASP
.NETの対応は、C#で書かれた独自のウェブサーバーであるXSPによって実現しています。Windows FormsはWineとの協力で開発されています。Windows Presentation Foundation (WPF) は現在のところ実装予定はありません。
Xamarin.FormsによるXAML開発は、WPF/Silverlight/WinRTとの互換性はありません。
MonoDevelop
Beagle
Banshee
関連事項
GNOME
IKVM.NET
ノベル
Ximian
Xamarin
外部リンク
*
公式ウェブサイト (英語)