开源软件（英語：open source software，缩写：OSS）又称开放源代码软件，是源代码可以任意获取的计算机软件，这种软件的版权持有人在软件协议的规定下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。开源协议通常符合開放原始碼的定義的要求。开源软件是开放源代码开发的典型代表，通常采用公开协作的开发模式。这类软件不仅向公众开放源代码，还常被发布至公有领域。其开放性和协作性与用户生成内容有着诸多相似之处。开源软件的英文“open source software”一词，出自自由软件的营销活动。
开源软件同时也是一種軟體散佈模式。一般軟體僅可取得已編譯的二進位可執行檔（exe），通常只有軟體作者或著作權所有者等擁有程式原始碼。
有些軟體的作者只將原始碼公開，卻不符合「開放原始碼」的定義及條件，因為作者可能設定公開原始碼的條件限制，諸如限制可閱讀原始碼的對象、限制衍生產品等，此稱之為公开源代码的免费软件（Freeware，例如知名网络论坛軟體Discuz!），因此公開原始碼的軟體並不一定可稱為開放原始碼軟體。


歷史 1997年，埃里克·雷蒙出版其著作《大教堂和市集》，探討黑客社群與自由軟體原則。1998年初，該論文受到極大的關注，為促成網景通訊公司將其受歡迎的網際網路套裝軟體《網景通訊家》釋放成為自由軟體的因素之一。這些程式碼即為今日大家熟悉的Mozilla Firefox與Thunderbird。
網景的行動激起雷蒙及其伙伴深入研究如何將自由軟體基金會的自由軟體概念及優點帶入商業軟體產業。他們查覺基金會的社會活動不如网景等公司的行動來得吸引人，因而試圖重新包裝自由軟體運動，以強調分享與協作軟體原始碼的潛在商機。他們選用的新名稱為「開放原始碼」（open source），很快地布魯斯·佩倫斯、出版家提姆·奧萊理、林納斯·托瓦茲及其他人支持新名稱。開放原始碼促進會於1998年2月創建，以推動使用新名稱，並宣揚開放原始碼的原則。


開放原始碼的定義 開放原始碼的定義由Bruce Perens（一位Debian創始人）定義如下：

自由再散布（Free Distribution）：允許獲得原始碼的人可自由再將此原始碼散佈。
原始碼（Source Code）：程式的可執行檔在散佈時，必需以隨附完整原始碼或是可讓人方便的事後取得原始碼。
衍生著作（Derived Works）：讓人可依此原始碼修改後，在依照同一授權條款的情形下再散佈。
原創作者程式原始碼的完整性（Integrity of The Author's Source Code）：意即修改後的版本，需以不同的版本號碼以與原始的程式碼做分別，保障原始的程式碼完整性。
不得對任何人或團體有差別待遇（No Discrimination Against Persons or Groups）：開放原始碼軟體不得因性別、團體、國家、族群等設定限制，但若是因為法律規定的情形則為例外（如：美國政府限制高加密軟體的出口）。
對程式在任何領域內的利用不得有差別待遇（No Discrimination Against Fields of Endeavor）：意即不得限制商業使用。
散布授權條款（Distribution of License）：若軟體再散佈，必需以同一條款散佈之。
授權條款不得專屬於特定產品（License Must Not Be Specific to a Product）：若多個程式組合成一套軟體，則當某一開放原始碼的程式單獨散佈時，也必需要符合開放原始碼的條件。
授權條款不得限制其他軟體（License Must Not Restrict Other Software）：當某一開放原始碼軟體與其他非開放原始碼軟體一起散佈時（例如放在同一光碟片），不得限制其他軟體的授權條件也要遵照開放原始碼的授權。
授權條款必須技術中立（License Must Be Technology-Neutral）：意即授權條款不得限制為電子格式才有效，若是紙本的授權條款也應視為有效。
儘管一開始接受，自由軟體基金會的理查·斯托曼現在斷然反對將「開源軟體」與「自由軟體」混為一談。雖然在法律上並未明確區分自由軟體與開源軟體，但斯托曼認為不宜濫用。


开源软件开发 = 开发模型 =
在他1997年的文章大教堂与集市中，开源倡导者Eric S. Raymond提出了一种被称为"集市"模型的开发OSS的模型。Raymond 将传统方法开发软件与建造大教堂相类比，"由个别巫师或小团队的法师精心制作"。他建议所有软件都应该使用集市风格开发，他将其描述为"各种不同议程和方法的大杂烩集市"。
然而，在传统的开发模型中，他称之为"大教堂"模型，开发是以中心化的方式进行的。角色是明确定义的，角色包括负责设计的人（建筑师）、负责项目管理的人以及负责实施的人。传统的软件工程遵循大教堂模型。
然而，集市模型是不同的。在这个模型中，角色并没有明确定义。Gregorio Robles提出，使用集市模型开发的软件应该表现出以下模式：


= 用户应被视为共同开发者 =
用户被视为共同开发者，因此他们应该可以访问软件的源代码。此外，鼓励用户提交对软件的添加、代码修复、漏洞报告、文档等。拥有更多的共同开发者增加了软件演化的速度。林纳斯之法则说："只要眼睛足够多，所有的错误都是浅显的。"这意味着如果有很多用户查看源代码，他们最终会找到所有的错误并提出如何修复它们的建议。请注意，一些用户具有高级的编程技能，此外，每个用户的计算机提供了额外的测试环境。这个新的测试环境提供了查找和修复新错误的能力。


= 早期发布 =
软件的第一个版本应该尽早发布，以增加尽早找到共同开发者的机会。


= 频繁集成 =
代码更改应尽可能经常地集成（合并到共享的代码库中），以避免在项目生命周期末期修复大量错误的开销。一些开源项目有每晚构建，自动进行集成。


= 多个版本 =
应该有至少两个版本的软件。应该有一个具有更多功能但更不稳定的版本和一个具有更少功能但更稳定的版本。有问题的版本（也称为开发版本）是为希望立即使用最新功能并愿意接受尚未经过充分测试的代码风险的用户准备的。用户然后可以充当共同开发者，报告错误并提供错误修复。


= 高度模块化 =
软件的一般结构应该是模块化的，允许独立组件的并行开发。


= 动态决策结构 =
需要一个决策结构，无论是正式的还是非正式的，根据不断变化的用户需求和其他因素进行战略决策。与极限编程进行比较。
然而，数据表明，OSS 并不像集市模型所暗示的那么民主。对 31,999 位开发者编写的五十亿字节的自由/开源代码进行的分析显示，74% 的代码是由最活跃的 10% 的作者编写的。一个项目中参与的作者平均有 5.1 人，中位数为 2 人。


= 优势 =
开源软件通常比专有软件更容易获取，这通常会增加其使用率。此外，标准的开源实现的可用性可以增加对该标准的采用。它还有助于建立开发者的忠诚度，因为开发者感到有权力并对最终产品有一种所有权感。
此外，OSS 需要更低的市场营销和后勤服务成本。这是一种宣传公司形象，包括其商业产品的好工具。OSS 开发方法有助于快速、廉价地生产可靠的高质量软件。
开源开发提供了加速创新和创新和社会价值创造的潜力。例如，在法国，一项政策鼓励政府支持自由开源软件，导致每年近 60 万次 OSS 贡献，通过增加开源软件的数量和质量来生成社会价值。这一政策还导致了科技初创公司的增加约 18%，以及IT部门就业人数的增加约 14%。
据说它更可靠，因为通常有数千名独立程序员测试和修复软件的错误。开源不依赖于最初创建它的公司或作者，即使公司失败，代码仍然存在并由其用户开发。此外，它使用对每个人都可访问的开放标准；因此，它不会出现在专有软件中可能存在的不兼容格式的问题。
它是灵活的，因为模块化系统允许程序员构建自定义界面或添加新的功能，并且它是创新的，因为开源程序是许多不同程序员合作的产物。不同的观点、公司目标和个人目标的混合加速了创新。
此外，自由软件可以根据纯技术要求进行开发。它不需要考虑商业压力，这往往会降低软件的质量。商业压力使传统软件开发人员更加关注客户的需求，而不是安全需求，因为这些特性对客户而言有些看不见。


= 开发工具 =
在 OSS 开发中，工具用于支持产品和开发过程的开发。
像Concurrent Versions System（CVS）和后来的Subversion（SVN）和Git这样的版本控制系统是工具的示例，通常本身也是开源的，有助于管理软件项目的源代码文件和对这些文件的更改。这些项目通常存储在像Launchpad、GitHub、GitLab和SourceForge这样的仓库中，这些仓库是托管并发布在源代码托管设施上的。
开源项目通常组织松散，"很少有形式化的流程建模或支持"，但通常使用问题跟踪器等工具来组织开源软件开发。常用的bugtracker包括Bugzilla和Redmine。
像mailing lists和IRC这样的工具提供了协调开发人员之间的手段。集中式代码托管站点还具有允许开发人员进行沟通的社交功能。


= 组织 =
一些参与开源软件开发的“知名组织”包括Apache Software Foundation，他们是Apache网络服务器的创建者；Linux Foundation，这是一个非营利组织，截止到2012年，由Linux操作系统的创造者Linus Torvalds雇佣，该操作系统的核心是Linux kernel；Eclipse Foundation，这是Eclipse软件开发平台的所在地；Debian Project，他们是著名的Debian GNU/Linux发行版的创建者；Mozilla Foundation，这是Firefox网络浏览器的所在地；以及OW2，这是一个欧洲社区，致力于开源中间件的开发。新组织往往拥有更复杂的治理模型，其成员通常由法律实体成员组成。
開放原始碼軟體研究所是一个成员制的非营利组织（501（c）（6）），成立于2001年，旨在促进在美国联邦、州和地方政府机构内开源软件解决方案的开发和实施。OSSI的努力重点是在联邦政府、国防部和国土安全部社区内推广开源软件程序和政策的采用。
美國開源組織是一个旨在提高美国联邦政府对开源软件的好处的认识的团体。他们的目标是鼓励政府使用开源软件，参与开源软件项目，并采用开源社区动态，以增加政府的透明度。
軍事開源軟體工作小組是一个致力于在军事领域推动开源软件的使用和创建的团体。


= 资金 =

以开源软件开发为中心的公司采用各种商业模式来解决提供根据定义免费授权的软件如何赚钱的挑战。这些商业策略的基础都是，开源技术的用户愿意购买在专有许可下的附加软件功能，或者购买其他服务或价值元素，以补充核心业务中的开源软件。这种附加价值可以包括但不限于，符合企业级要求的功能和正常运行时间保证（通常通过服务级别协议提供）以满足业务或合规要求，通过尚未在开源版本中提供的功能获得性能和效率提升，法律保护（例如，免受版权或专利侵权的赔偿），或者与专有软件应用程序典型的专业支持/培训/咨询等专业支持。


開放原始碼與自由軟體 許多人將開放原始碼與自由軟體（Free Software）視為相同，但若以定義條件而言，自由軟體僅是開放原始碼的一種，也就是自由軟體的定義較開放原始碼更為嚴格，並非開放原始碼的軟體就可稱為自由軟體，要視該軟體的授權條件是否合乎自由軟體基金會對自由軟件所下的定義：

自由軟體是在電腦為個人或為公共利益，而非私人公司或政府等企圖限制或監視我們工作時，我們在家、學校、公司使用時，我們具有其控制權。

开放源代码有时不單指开放源代码软件，它同时也是一种软件开放模式的名称。使用开放源代码开放模式的软件代表就有Linux操作系统。
严格地说来，开放源代码软件与自由软件是两个不同的概念，只要符合开源软件定义的软件就能称为开放源代码软件（开源软件）。自由软件是一个比开源软件更严格的概念，因此所有自由软件都是开放源代码的，但不是所有的开源软件都能称为“自由”。但在现实上，绝大多数开源软件也都符合自由软件的定义。比如，遵守GPL和BSD许可的软件都是开放的并且是自由的。
「开放源代码软件运动」是一个主要由程序工程师及其它电脑用户参与的声势浩大的运动。它是自由软件运动的一个分支，但两者的差别并不明显。一般而言，自由软件运动是基于政治及哲学思想（有时称为所谓黑客文化）的理想主义运动，而开放源代码运动则主要注重程序本身的质量提升。


许可证 开源软件有许可证（Open Source License），用户需要遵守许可证规定，以保护开源软件的利益。例如：GNU通用公共许可证（GPL）、BSD许可证、MIT许可证等。使用开源软件前，用户应该仔细阅读许可证。
开源软件许可证的类型  
开源软件许可证大致可以分为两种类型：Copyleft（互惠许可证） 和 Permissive（宽松许可证）。这两种类型都遵循开源定义（Open Source Definition），即使用者必须能够查看、修改和共享源代码。但它们在修改后如何再分发软件方面存在显著区别。
1. 宽松许可证（Permissive License）  
使用宽松许可证发布的软件，其衍生版本可以更改原始软件的许可证条款，甚至可以转为专有软件。例如，开发者可以在原有软件基础上进行修改，并选择使用与原始软件不同的许可证，而不会强制继承原许可证的条款。这种灵活性使得许多企业愿意使用宽松许可证的软件，并在其基础上构建商业化产品。常见的宽松许可证包括： 
MIT许可证（MIT License）：允许修改、分发和再许可，唯一的要求是保留原始许可证声明。
Apache许可证（Apache License）：与MIT许可证类似，但额外包含专利授权条款，进一步减少了法律风险。
2. 互惠许可证（Copyleft License）  
互惠许可证（也称为“传染性许可证”或“共享相同协议”）确保一旦某个软件以这种许可证发布，其衍生版本必须保持相同的许可证条款，并且不能添加额外的限制。这种方式保证了软件及其衍生作品的自由性。例如：
GNU 通用公共许可证（GPL）：要求任何基于GPL软件的衍生作品也必须采用GPL许可证发布，以确保软件的自由传播。
GNU 宽通用公共许可证（LGPL）：相较于GPL，LGPL允许软件以库的形式被其他非GPL软件使用，而不强制要求整个软件采用GPL。
Mozilla 公共许可证（MPL）：允许部分代码保持开源，但允许其他部分保持专有，属于一种中间形式的许可证。


参考文献 外部链接 参见