什么是开源软件?

已完成

开放源代码软件 是公开供任何人检查、修改和分发的源代码的软件。 开放源代码计划提供广泛接受的定义:

“开源软件是具有源代码的软件,任何人都可以检查、修改和增强源代码。 版权持有者授予用户学习、更改和分发软件的权利,无论出于何种目的,都受开放源代码许可条款的约束。

此定义强调几个关键原则:

  • 源代码可用性: 必须公开访问完整的源代码,而不仅仅是可执行二进制文件。
  • 修改自由: 用户可以更改软件以满足其需求、修复 bug 或添加功能。
  • 重新分发权限: 用户可以以原始或修改的形式与他人共享软件。
  • 许可条款: 使用权限由开放源代码许可证定义,该许可证指定权限、限制和义务。

开源软件与 专有软件基本不同,源代码仍然保密,使用权由版权持有者严格控制。

协作开源模型

开源开发 涉及使用多个参与者创建协作软件:

社区驱动的开发

  • 分布式参与者: 来自世界各地的开发人员贡献代码、文档、测试和支持。
  • 自愿参与: 许多参与者自愿参与,其动机是解决问题、学习、声誉构建或支持他们使用的工具。
  • 唯才是举: 项目中的影响通常与贡献的质量和数量相关联,而不是组织等级制度。
  • 透明进程: 开发发生在公共存储库中,任何人都可以在其中观察讨论、决策和更改。

协作工作流

  • 公共存储库: 代码托管在 GitHub、GitLab 或 Bitbucket 等平台上,任何人都可以在其中查看它。
  • 问题跟踪: Bug 和功能请求会公开跟踪,使社区成员能够识别问题并提出解决方案。
  • 拉取请求审查:参与者通过拉取请求提交更改,这些更改在合并前会由维护者和其他社区成员进行审查
  • 发布管理: 维护人员协调发布,确保稳定性和兼容性,同时整合社区贡献。

项目治理模型

不同的开源项目采用各种治理方法:

  • 仁慈的独裁者: 一个人(通常是创始人)对项目方向做出最终决定(例如,Python 与 Guido van Rossum 历史上)。
  • 核心团队: 一小群维护人员集体通过共识或投票做出决定。
  • 基础治理: 大型项目通常创建提供法律结构、资源和治理框架的基础(如 Apache Foundation、Linux Foundation)。
  • 企业赞助: 许多开源项目主要由依赖于软件的公司的员工维护。

广泛采用开源软件

开源软件在所有技术领域都无处不在:

行业采用统计信息

  • 企业使用情况: 超过 90% 企业在生产环境中使用开源软件。
  • Internet 基础结构: 大多数 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以前将开源视为对其专有软件业务模型的威胁。 在过去十年中,随着公司认识到开源的战略重要性,这发生了巨大变化。

Azure 中的开源

Azure 广泛集成开源技术:

Azure 中开源工具和技术的屏幕截图。

语言和运行时: Azure 支持 Python、Node.js、Java、PHP、Ruby、Go 和其他开源语言作为一流平台选项。

数据库: Azure 为 PostgreSQL、MySQL、MariaDB 和 Redis 以及专有产品/服务提供托管服务。

容器编排: Azure Kubernetes 服务(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 核心应用程序通常包含许多开源组件:

  • 前端库: 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: Microsoft类型安全的 JavaScript 开发语言是开源的,被广泛采用。

PowerShell Core: Microsoft的自动化框架是开源的跨平台。

.NET Foundation: Microsoft建立了 .NET Foundation 以支持 .NET 生态系统中的开源项目,提供资源、治理和社区支持。

有关详细信息,请参阅 .NET Foundation 网站

战略理由

Microsoft开放源代码的拥抱反映了战略业务决策:

开发人员采用: 开发人员更喜欢开源工具和语言。 通过支持开源,Microsoft吸引开发人员到其平台。

云业务: 开源工作负载可推动云采用。 Azure 上的优秀开源支持使平台更具吸引力。

创新速度: 开源通过社区贡献实现更快的创新,减少Microsoft的发展负担。

生态系统增长: 开源社区创建有价值的扩展、工具和知识,以提高平台价值。

竞争定位: 由于竞争对手(AWS、Google Cloud)广泛支持开源,Microsoft必须匹配或超过其开源功能。

为什么组织选择开源

组织出于多种原因选择开源软件:

成本注意事项: 消除许可费用可降低直接成本,尤其是在大规模部署软件或构建将许可成本传递给客户的产品时尤其重要。

灵活性和控制: 对源代码的访问意味着组织可以修改软件,以适应特定需求,独立修复关键错误,并且不受供应商的功能或修复时间表的限制。

透明度和安全性: 公共源代码支持安全审核,社区评审可更快地识别漏洞,并且缺少隐藏的后门或数据收集提供置信度。

避免供应商锁定: 开源软件通常可以部署到任何地方,减少对特定供应商的依赖和改进谈判立场。

社区支持: 活跃的开源社区提供论坛、文档、教程和对等协助,通常与商业支持质量相媲美或超过商业支持质量。

创新和功能: 开源技术通常首先出现,组织可以提供所需的功能,而不是等待供应商路线图。

了解什么是开源软件,及其广泛被接受的原因,为你提供基本背景,以探索组织在实施下一单元所涵盖的开源组件时必须解决的问题。