当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]在1980年代,随着PC的普及,自由软件经历了繁荣。1983年,斯托曼(Stallman)联合全世界的程序员,通过网络邮件传递群组从麻省理工学院人工智能实验室发起了一项免费软件活动,目的是开发从属操作系统和编译器,到一套完整的用于基本应用程序的开源软件生态系统。这是造福子孙后代的GNU项目。操作系统是整个计划的核心部分。Stallman希望志愿者能够共同开发一个完整的开源操作系统,该操作系统将允许任何人自由编辑、共享和发布自己的修改版本。这个理念在其GNU声明中得到了充分体现。

 在1980年代,随着PC的普及,自由软件经历了繁荣。1983年,斯托曼(Stallman)联合全世界的程序员,通过网络邮件传递群组从麻省理工学院人工智能实验室发起了一项免费软件活动,目的是开发从属操作系统和编译器,到一套完整的用于基本应用程序的开源软件生态系统。这是造福子孙后代的GNU项目。操作系统是整个计划的核心部分。Stallman希望志愿者能够共同开发一个完整的开源操作系统,该操作系统将允许任何人自由编辑、共享和发布自己的修改版本。这个理念在其GNU声明中得到了充分体现。

斯托曼代表的开源软件运动对计算机产业的影响除了软件本身之外,还逐渐形成了一系列对源代码控制程度不同的协议以及对应的许可证制度,这是对整个知识产权领域的重要贡献。比如针对GNU项目,为了进一步防止开源软件在未来被主张所有权,所有GNU涉及的软件都被放到GNU通用许可证GPL(General Public License)的保护之下。此方式成为最早的开源软件知识产权管理方式之一。它授权给任何人以任何目的(包括恶意)免费使用软件源代码,但是要求任何使用GNU授权下的开源软件代码开发出来的软件必须沿用同一授权许可证。除了GPL开源协议,还有在这之前和之后出现的众多开源软件协议。如果从对源代码的控制程度来划分,这些协议大致可以分成三类,它们的代表分别是MIT许可证协议、Apache许可证协议和GPL许可证协议。

MIT协议是最为宽松的一类。它允许任何人以任何方式使用源代码,包括用于商业目的,而且衍生出来的软件可以闭源。与其类似的协议还有伯克利UNIX版本使用的BSD 3。Apache协议相对宽松,因为它仍然不强制衍生软件使用相同的许可证发布。但是衍生软件必须对所有未修改的部分使用相同的许可证。而且在每个许可文件中,必须保留再分发代码中的所有原始著作权和更改说明。而GPL协议则相对严格一点,它要求所有衍生软件产品必须沿用同一许可证。也就是说如果使用GPL协议的开源软件来开发新的软件产品,那么新的软件产品必须也是开源的,而且需要使用GPL协议来管理。

从创立历史来看,1988年推出的代表早期黑客精神的MIT协议出现的最早,其目的是让更多的人使用开源软件;随后是1989年斯托曼倡导的开源运动推出的GPL协议,其目的是在一个开源平台上产生更多的开源软件;2000年才出现的Apache协议则更像前两种协议的折中版本,是为了满足中间用户的需求。这些宽容程度不同的许可证协议为软件开源运动提供了多样的管理方式,不但有利于更多开源软件的出现,也为不同用户提供了不同的选择。

1984年斯托曼等人不断用C和LISP语言开发GNU软件。截止到1989年,GNU计划中包括编辑器Emacs、编译器、Shell在内的大部分应用软件都已经开发完成。由于和UNIX的兼容性,这些软件被广泛使用,但是唯独操作系统还没有被开发出来。1990年在开源软件基金会推动下,GNU重启开发操作系统的计划并将其命名为Hurd,但是开发进程依旧缓慢。事实上Hurd很快就不再被需要,因为一年后芬兰的一个学生在开源软件运动的影响下协调众多网络志愿者成功开发出了一套开源操作系统。该系统加入了GNU生态圈成为其操作系统的核心,这就是Linux。

Linux的出现和UNIX息息相关。1987年荷兰计算机教授、操作系统专家谭宁邦(Andrew Tanenbaum)为了给学生讲解操作系统原理,自己编写了一款模拟UNIX的16位字元MINX操作系统,并且将其作为开源软件发布。MINX影响了很多学生。但是由于当时已经出现了32位字元的386微处理器,所以大家希望能有一款32位元的开源操作系统。1991年芬兰赫尔辛基大学学生托沃兹在MINIX操作系统上用GNU的C语言编译器开发出了UNIX的终端模拟器,用来连接学校里的UNIX服务器。但是不久他意识到自己已经在编写操作系统内核的部分,索性开始正式编写32位元的操作系统。

基本编写完成后,托沃兹在USENET上关于MINIX的群组讨论中发布了自己的新程序。他的朋友把内核源代码上传到赫尔辛基大学的FTP服务器上并将其命名为Linux。Linux立刻吸引了众多开源软件志愿者。擅长编程的志愿者开始为Linux添加不同的模块和新功能,计算机新手或者是用户则负责系统的测试工作。随着新功能和模块的不断增加,Linux的更新速度也越来越快,有时达到每天一个新版本。为了让Linux有一个相对集中的发展方向,托沃兹设立了Linux管理小组,对志愿者提供的新功能模块进行筛选,把符合发展方向的模块融入到Linux的下一个正式版本中。

不久Linux内核通过几百名志愿者的共同开发成功地发展成为功能丰富的操作系统,其可靠性也因为数千名志愿用户的不断使用和反馈而远远高于同时期的微软视窗。开源软件运动也因为Linux的成功而被主流媒体关注。雷蒙在他总结开源运动的《大教堂与市集》一书中对此有详细的描述。

使Linux成为软件行业的开源软件核心的另一个关键创新是集中运行在多个服务器平台上的所有开源应用程序,以便用户可以自动下载和使用它们。这具有确保平台上应用程序的安全性和防止用户从第三方网站下载由恶意软件合并的程序的优点。苹果从该软件组织那里学习到的知识已形成了Apple App Store。在90年代,Linux在PC市场中的份额低于Microsoft Windows。到1990年代末,由于开源的优势,Linux被用作构建云计算平台的独立操作系统。随着Google和Amazon等云计算平台的出现,Linux变得越来越流行。2000年之后,计算机行业进入了移动计算时代,并提供了新操作系统占主导的机会。有趣的是,这一变化产生的两个移动操作系统可以归因于UNIX的开源版本:Apple iOS系统移植于macOs,而Android使用的是LINX内核。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

CPU亲和度通过限制进程或线程可以运行的CPU核心集合,使得它们只能在指定的CPU核心上执行。这可以减少CPU缓存的失效次数,提高缓存命中率,从而提升系统性能。

关键字: Linux 嵌入式

在Linux系统性能优化中,内存管理与网络连接处理是两大核心领域。vm.swappiness与net.core.somaxconn作为关键内核参数,直接影响系统在高负载场景下的稳定性与响应速度。本文通过实战案例解析这两个...

关键字: Linux 内存管理

对于LLM,我使用b谷歌Gemini的免费层,所以唯一的成本是n8n托管。在使用了n8n Cloud的免费积分后,我决定将其托管在Railway上(5美元/月)。然而,由于n8n是开源的,您可以在自己的服务器上托管它,而...

关键字: 人工智能 n8n Linux

在Linux系统管理中,权限控制是安全运维的核心。本文通过解析/etc/sudoers文件配置与组策略的深度应用,结合某金融企业生产环境案例(成功拦截98.7%的非法提权尝试),揭示精细化权限管理的关键技术点,包括命令别...

关键字: Linux 用户权限 sudoers文件

Linux内核中的信号量(Semaphore)是一种用于资源管理的同步原语,它允许多个进程或线程对共享资源进行访问控制。信号量的主要作用是限制对共享资源的并发访问数量,从而防止系统过载和数据不一致的问题。

关键字: Linux 嵌入式

在云计算与容器化技术蓬勃发展的今天,Linux网络命名空间(Network Namespace)已成为构建轻量级虚拟网络的核心组件。某头部互联网企业通过命名空间技术将测试环境资源消耗降低75%,故障隔离效率提升90%。本...

关键字: Linux 云计算

在Linux内核4.18+和主流发行版(RHEL 8/Ubuntu 20.04+)全面转向nftables的背景下,某电商平台通过迁移将防火墙规则处理效率提升40%,延迟降低65%。本文基于真实生产环境案例,详解从ipt...

关键字: nftables Linux

在Linux设备驱动开发中,等待队列(Wait Queue)是实现进程睡眠与唤醒的核心机制,它允许进程在资源不可用时主动放弃CPU,进入可中断睡眠状态,待资源就绪后再被唤醒。本文通过C语言模型解析等待队列的实现原理,结合...

关键字: 驱动开发 C语言 Linux

在Unix/Linux进程间通信中,管道(pipe)因其简单高效被广泛使用,但默认的半双工特性和无同步机制容易导致数据竞争。本文通过父子进程双向通信案例,深入分析互斥锁与状态机在管道同步中的应用,实现100%可靠的数据传...

关键字: 管道通信 父子进程 Linux

RTOS :RTOS的核心优势在于其实时性。它采用抢占式调度策略,确保高优先级任务能够立即获得CPU资源,从而在最短时间内完成处理。RTOS的实时性是通过严格的时间管理和任务调度算法实现的,能够满足对时间敏感性要求极高的...

关键字: Linux RTOS
关闭