オープンソース ソフトウェアとは

完了

オープンソース ソフトウェア とは、だれでも検査、変更、配布できるようにソース コードが公開されているソフトウェアです。 オープン ソース イニシアチブは、広く受け入れわれている定義を提供します。

オープン ソース ソフトウェアは、誰でも検査、変更、強化できるソース コードを含むソフトウェアです。 著作権者は、オープンソースライセンスの条項に従って、あらゆる目的でソフトウェアを調査、変更、配布する権利をユーザーに付与します。

この定義では、いくつかの重要な原則が強調されています。

  • ソース コードの可用性: 完全なソース コードは、実行可能バイナリだけでなく、パブリックにアクセスできる必要があります。
  • 変更の自由: ユーザーは、ニーズに合わせてソフトウェアを変更したり、バグを修正したり、機能を追加したりできます。
  • 再配布権限: ユーザーは、元の形式または変更された形式で、他のユーザーとソフトウェアを共有できます。
  • ライセンス条項: 使用権限は、アクセス許可、制限、義務を指定するオープンソース ライセンスによって定義されます。

オープンソース ソフトウェアは、ソース コードが秘密のままであり、使用権が著作権者によって厳しく管理されている 独自のソフトウェアとは根本的に異なります。

共同オープン ソース モデル

オープンソース開発 には、複数の共同作成者との共同ソフトウェアの作成が含まれます。

コミュニティ主導の開発

  • 分散コントリビューター: 世界中の開発者がコード、ドキュメント、テスト、サポートを提供しています。
  • 任意参加: 多くの共同作成者は、問題の解決、学習、評判の構築、または使用するサポート ツールによって動機付けられ、自発的に参加します。
  • メリットクラシー: 通常、プロジェクトでの影響力は、組織階層ではなく、貢献の質と量に関連しています。
  • 透過的なプロセス: 開発はパブリック リポジトリで行われ、誰でもディスカッション、決定、変更を観察できます。

コラボレーション ワークフロー

  • パブリック リポジトリ: コードは、GitHub、GitLab、Bitbucket などのプラットフォームでホストされており、誰でも見ることができます。
  • 問題の追跡: バグと機能の要求はパブリックに追跡されるため、コミュニティ メンバーは問題を特定し、解決策を提案できます。
  • Pull request reviews: 貢献者は、マージする前にメンテナーや他のコミュニティメンバーによってレビューされるプルリクエストを通じて変更を提案します。
  • リリース管理: 保守担当者はリリースを調整し、コミュニティの貢献を組み込みながら安定性と互換性を確保します。

プロジェクト ガバナンス モデル

さまざまなオープンソース プロジェクトでは、さまざまなガバナンス アプローチが採用されています。

  • ベネボレント・ディクテーター: 1 人の個人 (多くの場合、創設者) がプロジェクトの方向性 (例: Guido van Rossum の Python) について最終的な決定を行います。
  • コア チーム: 少数のメンテナーが、コンセンサスまたは投票を通じてまとめて意思決定を行います。
  • 基盤ガバナンス: 大規模なプロジェクトでは、多くの場合、法的構造、リソース、ガバナンス フレームワークを提供する基盤 (Apache Foundation、Linux Foundation など) が作成されます。
  • 企業スポンサー: 多くのオープンソース プロジェクトは、主にソフトウェアに依存する企業の従業員によって管理されています。

オープンソース ソフトウェアの広範な導入

オープンソース ソフトウェアは、テクノロジのすべてのセクターで広く普及しています。

業界導入の統計情報

  • エンタープライズの使用状況: 90 を超える% の企業が、運用環境でオープンソース ソフトウェアを使用しています。
  • インターネット インフラストラクチャ: Web サーバーの大部分は Linux (オープンソース) 上で実行され、Apache または Nginx (オープンソース) を介してコンテンツを提供し、PostgreSQL や MySQL (オープンソース) などのデータベースを使用します。
  • クラウドコンピューティング: 主要なクラウド プラットフォームでは、Kubernetes、Docker、Terraform、およびその他の多数のオープンソース ツールなど、オープンソース テクノロジが広範に使用およびサポートされており、最新のクラウド インフラストラクチャの基盤となります。
  • モバイル デバイス: 世界で最も人気のあるモバイル オペレーティング システムである Android は、Linux カーネル上に構築されており、広範なオープンソース コンポーネントが含まれています。

テクノロジ スタックの構成

最新のテクノロジ スタックは主にオープンソースです。

  • オペレーティング システム: Linux は、クラウド インフラストラクチャ、コンテナー、および多くの埋め込みシステムに対応します。
  • プログラミング言語: Python、JavaScript、Java、Go、Rust、Ruby、PHP など、最も一般的な言語はオープンソースです。
  • データベース: PostgreSQL、MySQL、MongoDB、Redis、Elasticsearch はデータベースのデプロイを支配します。
  • Web テクノロジ: React、Angular、Vue.js、Express、Django、Rails を使用すると、Web アプリケーションの開発が可能になります。
  • 開発ツール: Git、Docker、Kubernetes、Jenkins、VS Code は、不可欠なオープンソース開発ツールです。

Microsoft によるオープンソースの採用

Microsoft は、オープンソース ソフトウェアに対する企業の姿勢の変革を例示しています。

歴史的転換

Microsoft はこれまで、オープンソースを独自のソフトウェア ビジネス モデルに対する脅威と見なしました。 これは、過去 10 年間で、オープンソースの戦略的重要性が認識され、大幅に変化しました。

Azure のオープン ソース

Azure では、オープン ソース テクノロジが広範に統合されています。

Azure のオープンソース ツールとテクノロジのスクリーンショット。

言語とランタイム: Azure では、Python、Node.js、Java、PHP、Ruby、Go、およびその他のオープンソース言語がファーストクラスのプラットフォーム オプションとしてサポートされています。

データベース: Azure では、PostgreSQL、MySQL、MariaDB、Redis 向けのマネージド サービスと、独自のオファリングが提供されています。

コンテナー オーケストレーション: Azure Kubernetes Service (AKS) は、オープンソースのコンテナー オーケストレーション プラットフォームであるマネージド Kubernetes を提供します。

開発ツール: Azure DevOps は Git、Jenkins、およびその他のオープンソース ツールと統合されていますが、GitHub (Microsoft によって取得) は、オープンソース開発のための世界最大のプラットフォームです。

データと分析: Azure では、Apache Spark、Hadoop、Kafka、およびその他のオープン ソースのビッグ データ テクノロジがサポートされています。

.NET 変換

.NET プラットフォームは、オープンソースに対する Microsoft の包括的なコミットメントを示しています。

オープン ソーシング .NET: Microsoft は MIT ライセンスのオープンソースとして .NET Core (現在は .NET 5 以降) をリリースし、プラットフォーム全体をソース コードで自由に利用できるようにしました。 .NET ランタイム、ライブラリ、コンパイラ、ツールはすべてオープンソースです。

クロスプラットフォーム開発: .NET をオープン ソーシングすることで、Microsoft は Windows、Linux、macOS でのクロスプラットフォーム開発を可能にし、大幅に拡張しました。NET のリーチ。

コミュニティの投稿: GitHub 上の .NET リポジトリは、Microsoft 以外の開発者から何千もの貢献を受け取り、会社はコミュニティの改善を積極的にレビューして受け入れています。

オープン ソースの依存関係: ASP.NET Core アプリケーションには、通常、多くのオープンソース コンポーネントが組み込まれています。

  • フロントエンド ライブラリ: jQuery、React、Angular、Vue.js 豊富なユーザー インターフェイスを有効にします。
  • ユーティリティ ライブラリ: Newtonsoft.Json、Serilog、AutoMapper、その他の数え切れないほどの機能が共通の機能を提供します。
  • テスト フレームワーク: xUnit、NUnit、Moq はテスト駆動型開発をサポートします。

オープンソース プロジェクトへの貢献

Microsoft は、独自のプロジェクト以外のオープンソース プロジェクトに積極的に貢献しています。

Linux カーネル: Microsoft は Linux カーネルに貢献し、Hyper-V 統合を改善し、Azure インフラストラクチャをサポートしています。

Kubernetes: Microsoft は Kubernetes の主要な共同作成者であり、AKS をサポートするプラットフォームの形成を支援しています。

オープン ソースのイニシアティブ: Microsoft は、オープンソース イベントをスポンサーし、重要なオープンソース インフラストラクチャに資金を提供し、開発者を雇用してオープンソース プロジェクトでフルタイムで作業します。

Microsoft が作成したオープン ソース プロジェクト

Microsoft は、既存のプロジェクトに貢献するだけでなく、重要なソフトウェアを作成し、オープンソースにします。

Visual Studio Code: 最も一般的なコード エディターはオープンソースであり、拡張機能、テーマ、改善点はグローバル コミュニティによって提供されています。

TypeScript: 型セーフな JavaScript 開発のための Microsoft の言語はオープンソースであり、広く採用されています。

PowerShell Core: Microsoft のオートメーション フレームワークは、オープンソースでクロスプラットフォームです。

.NET Foundation: Microsoft は、.NET エコシステム内のオープンソース プロジェクトをサポートし、リソース、ガバナンス、コミュニティサポートを提供する .NET Foundation を設立しました。

詳細については、.NET Foundation Web サイトのを参照してください。

戦略的根拠

Microsoft によるオープンソースの採用は、戦略的なビジネス上の決定を反映しています。

開発者の導入: 開発者は、オープンソースのツールと言語を好みます。 オープンソースをサポートすることで、Microsoft は開発者をそのプラットフォームに引き付けます。

クラウド ビジネス: オープン ソースワークロードは、クラウド導入を推進します。 Azure での優れたオープンソース サポートにより、プラットフォームがより魅力的になります。

イノベーションのスピード: オープンソースを使用すると、コミュニティの貢献によって迅速なイノベーションが可能になり、Microsoft の開発負担が軽減されます。

エコシステムの成長: オープンソースコミュニティは、プラットフォームの価値を高める貴重な拡張機能、ツール、知識を生み出します。

競争上の位置: 競合他社 (AWS、Google Cloud) がオープンソースを広範囲にサポートしている場合、Microsoft はオープンソース機能と一致するか、それを超える必要があります。

組織がオープンソースを選択する理由

組織は、複数の理由でオープンソース ソフトウェアを選択します。

コストに関する考慮事項: ライセンス料金をなくすと、直接コストが削減されます。特に、ソフトウェアを大規模に展開する場合や、ライセンス コストが顧客に渡される製品を構築する場合に重要です。

柔軟性と制御: ソース コードへのアクセスは、組織が特定のニーズを満たすようにソフトウェアを変更し、重要なバグを個別に修正し、機能や修正のためにベンダーのタイムラインにロックされていないことを意味します。

透明性とセキュリティ: パブリック ソース コードを使用すると、セキュリティ監査が可能になり、コミュニティ レビューによって脆弱性が迅速に特定され、非表示のバックドアやデータ収集が存在しないことが確実になります。

ベンダーのロックインの回避: 通常、オープンソース ソフトウェアは任意の場所に展開できるため、特定のベンダーへの依存が減り、ネゴシエートの位置が改善されます。

コミュニティ サポート: アクティブなオープンソース コミュニティは、フォーラム、ドキュメント、チュートリアル、ピア アシスタンスを提供します。多くの場合、商用サポートの品質に匹敵または超えています。

イノベーションと機能: 最先端のテクノロジは、多くの場合、最初にオープンソースに出現し、組織はベンダーのロードマップを待つ代わりに、必要な機能を提供できます。

オープンソース ソフトウェアとは何か、そしてそれが非常に広く採用された理由を理解することは、組織がオープンソース コンポーネントを実装する際に取り組む必要がある懸念事項を調査するための不可欠なコンテキストを提供します。これは次のユニットで取り上げます。