1. 自由软件
1.1. 自由软件运动发端于个人计算机及软件产业起飞的20世纪80年代初期
1.1.1. 在个人计算机时代,开源创新很“煎熬”,而在互联网时代,开源创新很“光鲜”
1.1.2. 从表象上看,在个人计算机时代,开源创新没有取得商业成功,而在互联网时代,开源创新造就了互联网产业的蓬勃发展
1.2. 开源创新在互联网时代成为主流的因素
1.2.1. 开源是应对不确定性时代挑战的重要创新模式
1.2.1.1. 面对互联网产业的巨大不确定性,创新者通过开放源代码,以更低的成本吸引更多创新同路人和“新潮”消费者参与到新技术新产品的迭代和传播之中,以寻求将边缘低端产品迅速转变为主流高端产品
1.2.2. 开源是挑战行业垄断者的重要创新途径
1.2.2.1. 20世纪90年代,微软是个人计算机时代的垄断者,并试图利用其在个人计算机上的垄断地位将其控制力延伸至新兴的互联网产业
1.2.2.2. 互联网时代的不确定性远非微软的闭源模式所能驾驭,以Google为代表的互联网挑战者坚持走开源发展路线,成功打破了微软的垄断企图,成为互联网时代的商业赢家
1.2.3. 开源是激发创新者及其社区创新活力的重要创新手段
1.2.4. 开源是保障软件安全发展的“阳光”创新机制
1.2.4.1. 广大开源社区参与者成为发现和解决软件问题的主要力量,任何软件问题在无数开发者的“众目睽睽”之下都“无处遁形”
1.3. 人工智能时代
1.3.1. 人工智能时代,开源作为应对不确定性挑战的创新模式,其内在逻辑没有变
1.3.1.1. 人工智能的不确定性依然存在
1.3.1.1.1. 大模型如何盈利尚未达成共识,多元探索势不可挡
1.3.1.1.2. 大模型能否实现通用人工智能尚存争议
1.3.2. 人工智能时代,开源作为挑战行业垄断的创新途径,其内在逻辑没有变
1.3.2.1. Meta为抗衡OpenAI,重新扛起开源大旗,吸引了大量规模追随者
1.3.2.2. 人工智能时代的开源与闭源之争将长期存在
1.3.3. 人工智能时代,开源作为激发创新者活力之创新手段,其内在逻辑没有变
1.3.3.1. 越来越多的人工智能研究者更加倾向于开放自己的研究成果,从而获得同行的关注和参与
1.3.4. 人工智能时代,开源作为保障安全发展的“阳光”机制,其内在逻辑没有变
1.3.4.1. 人们更倾向于开源安全的“阳光”机制,即通过大众参与保障人工智能的安全发展
2. 开源简史
2.1. 数百年来,新的技术和创新都是在彼此分享思想的过程中诞生的,在每个发展阶段中都能看到前人所打下的基础
2.1.1. 唯一的挑战就是思想的传播能力,古登堡发明了印刷机,加速了知识的传播,进而开启了文艺复兴时代
2.2. 协作精神和商业化之间一直存在着一种天然的紧张关系
2.2.1. 15世纪和16世纪建立专利制度的初衷是保护发明者,但在许多情况下,这一行为也造成了扼杀开放协作的垄断
2.3. 开源作为一个术语可以追溯到1998年2月3日,但其精神和理念可以追溯到几十年前
2.3.1. 查看、修改和分享,以及开放协作的概念,可以追溯到互联网和计算机出现之前
2.3.2. 这在黑客和创客文化中很常见,两者都根植于工匠精神
2.4. 在计算机领域,开源可以追溯到1955年加利福尼亚州洛杉矶市的一个房间里
2.5. 在20世纪50年代和60年代,随着计算机技术的兴起,以及在学术界的应用,开放协作和去中心化社群成为常态
2.6. 目标代码是受版权保护的,就像文学书籍一样
2.7. 20世纪70年代末到80年代初,布告栏系统(Bulletin Board System,BBS)开始兴起
2.8. Richard Stallman
2.8.1. 他于1983年启动了GNU项目,旨在编写一个完整的、不受软件公司源代码许可限制的操作系统
2.8.1.1. GNU编译器套件(GNU Compiler Collection,GCC)
2.8.1.2. GNU调试器
2.8.1.3. GNU Emacs
2.8.2. 倾向于更自由的软件方法(意味着许可证应确保代码和衍生作品仍然是自由软件),而不是更宽松的许可证方法
2.8.3. Stallman的工作为如今的开源项目奠定了基础
2.9. Linus Torvalds
2.9.1. 他在1991年发布了一个名为Linux的UNIX克隆版本
2.9.2. Linus的工作则将开源和自由软件带入了主流
2.9.3. Linux的独特之处在于,除了商业应用和成功,业余爱好者和技术爱好者社群也同样强大
2.9.4. Debian Linux和Slackware是早期的发行版,但至今仍拥有庞大的用户群
2.9.5. 1994年和1995年,当Linux开始在商业领域取得一些初步进展时,一些公司试图注册Linux这个术语的商标
2.9.5.1. Linus尽其所能与他们抗争,并最终获得了Linux的商标
2.9.5.2. 随后,Linus与Linux International达成合作,使该组织成为持有Linux商标的机构
2.10. 1997年,自由软件的主要影响者之一Eric Raymond写了一篇文章《大教堂和集市》(“The Cathedral and the Bazaar”),讲述了他作为早期自由软件项目维护者的经历以及他对Linux社群的观察
2.10.1. “大教堂”,软件在闭门开发后公开发布(如各种GNU项目)
2.10.2. “集市”,软件是在公众视野中通过互联网公开开发的(如Linux社群的模式)
2.11. 从历史的角度来看,开源被认为是促进网景通信公司在1998年1月发布Netsuite Communicator源代码并启动Mozilla项目的推动力
2.12. Apache软件基金会(Apache Software Foundation,ASF)是早期的开源基金会之一,它成立于1999年,是一个慈善组织
2.13. 云原生计算基金会(Cloud Native Computing Foundation,CNCF)
3. 开源
3.1. 开源不仅是主要的软件开发方法论,还是助力快速创新、分散协作、生态系统建设和职业发展的卓越战略
3.2. 如今,无论在哪里,都离不开与开源的互动
3.2.1. 随着开源的不断涌现,随之而来的是巨大的多样性
3.3. 开源项目的运营方式也同样重要
3.3.1. 开源项目的技术栈像是一门科学,而项目运营则更像是一门艺术
3.3.2. 没有两个项目是完全相同的,对一个项目有效的方法可能不适用于另一个项目
3.4. 开源是一门艺术,而不是一门科学
3.5. 开源是一种可以让多个人和组织公开协作构建软件的方式
3.5.1. 涉及许可证,许可证规定了重用的条款
3.6. 开源是指源代码可以自由提供给他人进行修改和再分发
3.6.1. 开源产品通常允许你使用源代码、设计文档或产品内容
3.6.2. 开源模式是一种去中心化的软件开发模式,鼓励开放协作
3.7. 自由提供源代码的概念,允许任何人查看、修改并与他人分享源代码
3.7.1. 不仅免费提供软件(也称为免费软件),还允许用户查看源代码,根据自己的需求对其进行修改,并与他人分享
3.8. 侧重于开放协作,这意味着任何人都可以参与代码的构建
3.9. 一个去中心化社群的主题
3.9.1. 这意味着开源项目真的是全球性的
3.9.2. 许可证模式(任何人都可以自由查看、修改和分享代码)和分发模式都意味着世界上任何找到并使用此代码的人都是社群的一部分
3.9.3. 一条跨地区、文化、性别、背景、年龄和能力的连接纽带
3.10. 开放源码促进会一直维护着开源的定义,该定义被视为衡量一段代码或项目是否真正开源的标准定义
3.11. 许可证被认为是开源的基本条件
3.11.1. 真正使开源具有变革性的是开放协作和去中心化社群,它能将各种各样的人聚集在一起,共同构建个体无法完成的优秀作品
3.11.2. 许可证的选择使得建立社群和协作成为可能,这反过来又能够使开源项目获得成功
3.12. 开源是由许多不同动机和不同背景的热情爱好者推动的,他们有一个共同点,那就是倡导自由地与他人分享代码和知识,通过去中心化社群进行开放协作
4. 开源的原因
4.1. 要了解为什么要开源,最佳方式是查看一些项目并了解这些社群的动机
4.2. PHP
4.2.1. 让交互式网页更易于构建,使任何具备基本编程技能的人都能够构建网页应用程序
4.3. Blender
4.3.1. 计算机图形学和其他交互式显示技术是开源的强势领域之一
4.3.2. Blender专门面向所谓的创意人群
4.4. Zowe
4.4.1. 大型机应用程序通常是基于几十年前的COBOL或FORTRAN代码构建的
4.4.2. Zowe是由CA Technologies(2019年被Broadcom收购)、IBM和Rocket Software共同创立的项目,最初的代码贡献来自这些公司
4.4.3. Zowe提供了一个框架,用于将大型机应用程序和数据与其他应用程序和工具集成,该框架采用了更常见于非大型机开发者的开发工具和方法
4.4.4. 动机
4.4.4.1. 他们需要不同的团队和方法来处理大型机应用程序和数据,这与他们处理其他计算机系统时完全不同
4.4.4.2. 存在着不断增长的技能差距,即在大型机行业取得成功所需的技能与为其他系统开发软件所需的技能有很大的差别
4.5. 以开源的方式进行的,开源有助于将这个庞大的社群聚集在一起,以改进并提供反馈,创造出每个人都可以受益的公共资源
5. 运用开源
5.1. 开源有着漫长而曲折的历史,它的发展主要是由对技术充满热情的爱好者推动的,随着时间的推移,商业投资也逐渐融入开源,而这些开源社群则始终保持了其原有的理念
5.2. 爱好者之间的信息分享
5.2.1. 最早的(也可以说是最普遍的)开源应用只是能够与他人分享信息和知识,以解决共同的问题
5.2.2. 专注于信息分享的开源项目
5.2.2.1. Ubertooth:该项目构建了一个用于蓝牙实验的开源无线开发平台
5.2.2.2. PiFire:该项目为烟熏炉或烧烤炉提供了一个支持无线网络的智能控制器,包括基于Raspberry PI平台的软件设计和硬件设计
5.2.2.3. SecurityExplained:该项目专注于为软件安全社群提供各种信息
5.2.2.4. Darwin Core:该项目是一个由Darwin Core维护兴趣小组维护的标准,标准中包括一个术语表,旨在促进生物多样性信息的分享
5.3. 基础技术
5.3.1. UNIX方式或UNIX哲学,它描述了一种最小化和模块化的软件编写方法,这种方法是由Douglas Mcllroy和Peter H.Salus等人最先阐述的,并在Ken Thompson和Dennis Ritchie的著作中被进一步推广
5.3.2. 专心做好一件事
5.3.2.1. grep:一个命令行工具,用于在纯文本数据集中搜索匹配正则表达式的行
5.3.2.2. sed:代表流编辑器,用于解析和转换文本
5.3.2.3. cat:该工具用于从一个程序中获取输出并写入标准输出,以便作为另一个程序的输入
5.3.3. 开源大大降低了构建软件的成本,更重要的是,开源也使高质量的工具、编程语言和框架变得更容易获取
5.4. 构建技术生态系统
5.4.1. 开源项目的形成和动机在本质上与构建生态系统更相关
5.4.2. 构建这些项目的目的是,使得无论是开源解决方案,还是商业解决方案,都能够具有一定的兼容性和技能适配性
5.4.3. Kubernetes:这是一个开源系统,用于自动化部署、扩展和管理容器化应用程序
5.4.4. Anuket Assured:这是一个开源的、社群主导的合规性和验证项目,用于展示商业云原生、虚拟化产品和服务的准备情况和可用性,包括NFVI、云原生基础设施、VNF和CNF,它们使用了Anuket和ONAP组件
5.4.5. The Zowe Conformance Program:该项目建立了与Zowe开源项目构建或集成解决方案之间的互操作性需求
5.5. 提供高质量的免费软件
5.5.1. Linux发行版,如Debian、Fedora、Ubuntu、ArchLinux等,为免费桌面环境铺平了道路,让用户在使用计算机时更加灵活
5.5.1.1. 在许多情况下,这也让使用现代软件重用过时的硬件成为可能,这在那些难以获得现代硬件的地区很有价值
5.5.2. LibreOffice:该应用程序提供了一个与Microsoft Office相当的完整办公套件
5.5.3. GNU图像操作程序(GNU Image Manipulation Program,GIMP):该应用程序的图像编辑和操作类似于Adobe Photoshop
5.5.4. Inkscape:这是一个开源矢量图形编辑器,很像Adobe Illustrator
5.5.5. Mozilla Firefox:它源于1998年Netsuite Communicator的开源版本,提供了一个先进且安全的网络浏览器