FOSS历史回顾:三代开源人的故事

现在是2016年,你环顾一下四周,开源早已无处不在了。开源无论是规范、形式、以及面貌都和最初的大相径庭,然而事实上,这也预示着新一代的开源程序员们的崛起。下面我们尝试解释下。

(以下这一段落为作者自谦)

为了避免我是在互联网上散步谎言的嫌疑,我需要声明几代的想法纯属虚构。我很清楚这其中并没有某人是某人生理上的下一代,我清楚的意识到只是说哪些第一个写自由和开源软件的前辈们,而且说上个世纪的事情。

作者解释了题目,以免产生一些不必要的误解。比如 Python 编程语言的技术研讨会就会经常被环保主义者抗议。根据常识,一代这个概念用于衡量文化的变革是个非常不错的概念,如果读者能够从这个角度来看待自由和开源软件的话,我认为你可以很容易的看出三个分离的代。

第一代开源人

第一代是 Richard Stallman 那一代。Richard Stallman 在上世纪80年代发起了自由软件运动,他们创建了GNU和FSF,而这就是差不多十年后Linux能够诞生的基础。他们也更加的倾向于视自由软件为一种道德讨伐,而且他们在相对主流的技术世界仍然是处于边缘的位置。

第二代开源人

第二代的来临则是伴随着 Linux 内核的诞生而开始的一代,他们是第一次能够访问能够正常运行的自由/开源操作系统的一代,而此操作系统是 Linus Torvalds 的内核加上 GNU 的套件组合而来的。
(作者在此声明,他至今没有完全搞清楚自由软件和开源软件的区别。)

关于自由软件与开源软件的区别,恐怕是作者故意所为,或者是讽刺那些视自由软件,或者对 GPL 许可证无视对人们的吧。

第二代相比于第一代要少一些思想,Torvalds 和他的追随者或合作伙伴们之所以青睐开源主要是因为其带来的功能,而道德的原因很小。他们认为这是一种更加有效的编码方式,能够以更加便宜、平民的方式使用电脑。但是,他们仍然保持独立,没有成为某些大企业的爪牙。

第二代开源人也是将 GNU/Linux 带入主流的一代。他们所写就的代码不仅是开源的操作系统更加的完善和实用,而且在追求至高,能够和专业的闭源平台进行正面的竞争。他们在上世纪末和本世纪初面临的是和微软这样的大鳄的艰苦斗争,关于此,年轻一代的程序员可能难以理解。在2000年左右的那些个不怎么活跃的开源程序员或用户,会想当然的认为,他们使用 GNU/Linux 并不会担心会被起诉。

当下这一代

也就是说的第三代的开源程序员和用户们,他们长大成人后,GUN/Linux 已经是部署在数百万台服务器上运行的操作系统了,此时已经没有人再质疑开放源代码的价值了。对于这一代人来说,开源是毋需争议的默认选择。

基于这个原因,什么理想、什么功能主义统统都销声匿迹了。今天多数的开源程序员不曾放弃代码是因为他们认为这是在道义上正确的事情,或者说他们认为这样更加的高效。他们这样做的原因其实是没有更多的项目让他们去选择。从云计算(其中,OpenStack更是说明这事的根本)到大数据(什么Hadoop、Spark、以及正在吞噬专有软件地盘到NoSQL数据库)乃至SDN,甚至是NFV,开源都是占主导地位的。如果你是在这些生态系统中做事情的话,你一定得用到开源代码。

很大一部分开源的支持者都毫无疑问的认为这是好事情。在另一方面,有些人也开始担心,开源界正在失去前两代人所努力争取的东西。对于许可证的使用的趋势基本都是 Apache,而放弃了 GPL,这对哪些认为 Apache 许可太过于宽松的人来说,更加的紧张不安。

同样,在开源领域,企业对其的影响是越来越大--尤其是大家最近争论的 Linux 基金会改变了某些章程--引起了社区各界的各种紧张。

最后说一点,声明这是非常重要的一点。开源社区最近几年在拉拢着微软,这虽然对于第三代开源人来说是比较正常的,但是那些曾经在昔日战斗过的人们是坐立不安的。

开源真的已经进入了一个全新的时代,再也回不去了?这是一件好的事情吗?这些都是很主观的问题。但是值得我们去深思,尤其是我们正在准备迎接 Linux 内核25周年的这个时刻。

原文地址:http://www.infoq.com/cn/articles/foss-historical-review


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring中@Autowired、@Qualifier、@Resource的区别

转自: Spring中Autowired、Qualifier、Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1、AutowiredAutowired 可以单独使用。如果单独使用,它将按类型装配。因此,如果在容器中声明了多个相同类型的bean,则会…

map分组后取前10个_海关数据 | 图解前10个月外贸

*内容转载自微信公众号:海关发布RECOMMEND【 推荐阅读 】海关数据 | 图解前三季度我国外贸海关数据 | 图解8月外贸海关数据 | 一图看懂前7个月外贸海关数据 | 图解上半年度外贸增3.9%声明本微信订阅号不以商业营利为目的,不排除部分文字内容或图片转载自…

回顾build 2016:你好,这是微软迄今最好的Windows开发平台

按:本文作者陈计节,ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者,全栈工程师,技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 在最近的开发者大会(Build 2016)上,微软面向开…

深入理解多线程(二)—— Java的对象模型

转载自 深入理解多线程(二)—— Java的对象模型上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会…

8.1-CPU结构(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】CPU结构 Cpu的首要功能就是解释指令;功能列表如下: 1) 取指令:从内存中读取…

生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)

写在前面四五年前,接触生物信息的时候,阴差阳错,我选择用perl。事实上,直到嫌我,我还是认为我当初的选择,完全正确!。在做一些小文本的快速处理上,perl在我看来,从来最优…

8.2-指令周期(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】指令周期 【1.1】指令周期概述 1)指令周期:取出并执行一条指令所需的全部时间&#xff1…

深入理解多线程(三)—— Java的对象头

转载自 深入理解多线程(三)—— Java的对象头上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。 Java对象…

python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出

我有一个脚本,其中包含Tkinter模块,我想每隔3分钟更改一次背景颜色,例如绿色3分钟,然后橙色,然后红色。 我有显示绿色的代码,但无法更改它。当我在代码中创建函数时,会遇到一些不同的错误&#…

回顾微软近年来对于Linux和开源的策略

2014年十月,在旧金山举办的一场活动中,微软的CEO Satya Nadella向公众表示,微软“爱Linux”。作为昔日的竞争对手,微软对Linux的态度逐渐从敌对转变为合作。自那次发言以来,微软在开源方面频频重拳出击,似乎…

深入理解多线程(四)—— Moniter的实现原理

转载自 深入理解多线程(四)—— Moniter的实现原理本文是《深入理解多线程系列文章》的第四篇。点击查看原文,阅读该系列所有文章。 在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理…

(转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入。它是Spring中一个强大的扩展接口。本篇文章来https://juejin.cn/post/6…

通过图书编号查询python_Python图书接口调用代码实例

1.[代码][Python]代码#!/usr/bin/python# -*- coding: utf-8 -*-import json, urllibfrom urllib import urlencode#----------------------------------# 图书电商数据调用示例代码 - 聚合数据# 在线接口文档:http://www.juhe.cn/docs/50#-------------…

深入理解多线程(五)—— Java虚拟机的锁优化技术

转载自 深入理解多线程(五)—— Java虚拟机的锁优化技术本文是《深入理解多线程》的第五篇文章,前面几篇文章中我们从synchronized的实现原理开始,一直介绍到了Monitor的实现原理。这一篇在前几篇的基础上,深入介绍一下…

Visual Studio Code 1.0正式发布

Visual Studio Code 是一个运行于 OS X,Windows 和 Linux 之上的,针对于编写现代 web 和云应用的跨平台编辑器。 这标志着 Microsoft 第一次向开发者们提供了一款真正的跨平台编辑器。虽然完整版的 Visual Studio 仍然是只能运行在 Windows 之上&#xf…

springboot使用ImportBeanDefinitionRegistrar 动态注册bean

【README】 1.采用 ImportBeanDefinitionRegistrar 动态注册bean,应用场景有: 如 一个后端服务需要用到多个 rabbitmq集群客户端,kafka客户端;这时就需要手动注册多个同类型的bean,但不同beanName,并用 …

python 线性回归函数_Python实现的简单线性回归算法实例分析

本文实例讲述了Python实现的简单线性回归算法。分享给大家供大家参考,具体如下:用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果:> summary(fit)Call:lm(formula weight ~…

UWP应用模型概述

Andrew Clinick是微软的一名项目经理,在Build 2016大会上,他概括地讲述了通用Windows平台(UWP)应用模型的新特性。今年的其中一个亮点是,代号为Centennial的项目实现了桌面应用程序到UWP应用的转换。 Andrew一开始就阐…

8.3-指令流水(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】如何提高机器速度 1 提高访存速度多体并行:对多个存储体进行交叉访问,在一个主存周期中&am…

Java虚拟机是如何执行线程同步的

转载自 [译]Java虚拟机是如何执行线程同步的想介绍下synchronized的原理,但是又不知道从何下手,在网上看到一篇老外的文章,介绍了和线程同步相关的几个基础知识点。所以想把它翻译一下给大家看看。相信看过这些基础知识之后再看我后面要写的s…