天天看点

《开源软件开发导论》作业1作业要求五个问题

关于开源的五个问题

  • 作业要求
  • 五个问题
    • 1.开源的三个阶段具体含义是什么?
    • 2.开源的版权如何使用?
    • 3.一个开源项目如何得以正常运行?
    • 4.开源如何保证安全?
    • 5.对我们学生来说开源应该算什么?

作业要求

这是《开源软件开发导论》的第一次作业,题目与要求是 第一次作业(看开源的资料,提五个问题)。

主要是阅读《2022中国开源发展蓝皮书》并提问目前还没有答案的问题。

五个问题

1.开源的三个阶段具体含义是什么?

在 《2022中国开源发展蓝皮书》 开篇就提到了开源的三个阶段:

全球开源正呈现出三个发展阶段:即结合企业、产品与生态的第一阶段;从跨界到融合深度信息技术与应用的第二阶段;建设产业链、供应链实施安全保障的第三阶段。

中国开源已进入第二阶段,呈现出开源产品百花齐放、开源技术跨界渗透传统行业的特点,开源的发展使产业界和学术界对共建开源生态有了更深刻的理解和更迫切的追求。

第一个阶段比较好理解,像Linux、Mysql都是一些开源产品,之前也有过一些接触,操作系统课、数据管理技术课上学习和使用过这些开源产品,可以说开源产品已经悄无声息的进入我的学习中了,但是后两个阶段给出的名词却对我来说有点陌生。

搜索

开源软件的三个阶段

,并没有找到相关解释,这三个阶段似乎是这本蓝皮书中首次提出的概念,在第三章中介绍了中国重点领域开源项目发展现状,列举了在重点领域取得的成就,但是这些领域(比如操作系统、数据库、人工智能、云计算)仍然属于IT行业,我感觉并没有特别体现“跨界”或者“融合”,那么该如何具体理解这三个阶段的含义?或者有哪些例子可以说明第二阶段的“跨界”、“融合”或第三阶段的“产业链”?

2.开源的版权如何使用?

在 蓝皮书 的

开源许可证的选用逻辑

中提到

选择开源许可证时,可以从三层阶梯的五个问题入手:他人修改代码后,是否可以闭源;新增代码是否采用同样许可证;是否需要对源码的修改之处,提供说明文档;每一个修改过的文件,是否都必须放置版权说明;衍生软件的广告是否可以用你的名字促销。
《开源软件开发导论》作业1作业要求五个问题

在 蓝皮书 后面机遇与挑战章节中也有

根据Synopsys公司《2021开源安全和风险分析报告》,2020年的被审代码库中有65%包含存在许可证冲突的开源代码。

开源许可有多种不同的协议,不同的工具也有不同的使用许可。比如我用学校邮箱注册的JetBrains学生账号,可以使用IntelliJ IDEA专业版来写Java,但是不能用于商业用途。用来做每周作业绰绰有余了,但是软件开发是一个庞大的工程,当使用开源软件,尤其是使用不同协议、不同公司的产品时应该如何遵守协议,对于没有足够法律能力的小团队来说可能一不小心就会违反协议,可能也会很难维权自身开发的代码部分。

这个问题蓝皮书也并没有给出明确回答。开源版权应该如何保护?我们作为学生应该如何使用和学习开源项目?

3.一个开源项目如何得以正常运行?

在 蓝皮书 第五章中有如下介绍:

开源生态是指由开源组织和整个产业界互动形成的、广泛联系的合作平台。

开源组织是开源生态的重要组成部分,包含开源基金会、综合型产业联盟、专业型开源组织、地区型开源组织、开源推广型社会组织等几大类型。

开源组织中开源基金会等项目托管型的组织较少,而战略智库型、文化建设与推广型的组织较多。

我之前课程的大作业中,虽然也用过Github和Gitee这样的开源平台,但是使用的是个人或者团队开发的形式,通常是由老师助教发布作业要求,这些平台只起到一个下载作业要求和部分作业代码的功能,组员完成组长任务分配,小组完成老师作业分配。和一些已经工作的学长交流,不同的企业项目运作也是这样的,由负责人给定任务层层分配。

在蓝皮书中,对这些开源组织的介绍中只是简单的列举,并没有详细说明各自的管理模式。那么开源项目倒到底是如何运行的?如果只是像传统团队开发一样从上到下分配任务,那么和传统项目有什么区别?如果是打散了团队这种组织模式没有一个,那么似乎变成了一盘散沙,像Linux这样的工作量就有点不可完成了,开源又是怎么进行统一整合的?

4.开源如何保证安全?

蓝皮书也指出了开源面临的漏洞风险:

根据Synopsys公司《2021开源安全和风险分析报告》,Black Duck审计服务团队在2020年审计的涵盖17个行业的1546个流行代码库中,98%的代码库包含开源代码,75%的代码由开源代码构成,84%的包含至少一个漏洞,每个代码库平均有158个漏洞,65%的代码库存在许可证冲突。

许多商业公司对于软件的保护通常是对软件进行加密,比如一些平台登陆不是直接传输密码,而是由自己的算法,因此也有“彩虹表”这种暴力破解的方法。但是开源可能会导致加密算法直接暴露。

还有一些其他的漏洞,基于具体实现,可能设计一些特殊值会绕开限制,比如c库里的printf函数,就可以设计长相奇怪的字符串,读取内存任意位置的数据,所以是不安全的,如上面的原文中给的数据,源码公开会暴露大量漏洞,当然可以通过社区及时修复,但是很难保证一个不漏。那么如何保证安全性呢?

5.对我们学生来说开源应该算什么?

蓝皮书中是一个高屋建瓴的视角来看待开源的发展,但是似乎有些缺乏从个人出发的视角。

于是我又去读了课程资料里给的链接,在从二十年开源经历出发,70 后大龄程序员谈成长、困境与突围中提到

参与开源一定会增加自己的职场竞争力,因为这可以让你更容易接触到先进的技术

“还有一个参与开源的好处,那就是方便‘跳槽’”。虽然听起来不太正经,但是确实是一个行之有效的方法,因为很多公司的 HR 或者猎头都会通过开源项目来寻找一些有经验的开发者,在开源这条路上越走越深也就意味着有越来越多的工作机会向你在招手。

在参与开源,从给 RocketMQ 提 issue 开始中作者提到自己的收获

开源收获

大概是带来了更多自信了吧,毕竟说起来也算是参与过apache顶级开源项目的人,哈哈。

以前一直觉得自己的水平不咋的,现在也是。不过开源参与的多了,便没以前那么不自信了。

在开源生活实录.1.LAMP之辉中作者提到自己从开源中学习的经历

也就是基本上每周有40个小时业余时间投入到 开源技术学习中, 为什么这么积极呢?

因为没有资料, 很多时候要自己先翻译出来官方对应文档, 再尝试, 失败后对应查资料尝试解决;

注意, 那时 Google 和其它搜索引擎刚刚发布, 都没有很好搜索效果; 特别是中文开发资料, 能去交流的只有少数几个技术论坛, BBS 是那时主要交流场景; IRC + mailling-list, 是关键技术讨论空间;

那时, 还没有足够英文自信, 问技术问题也只敢去中文论坛, 再从中文技术论坛的友情链接找到其它相关的技术论坛…

就象蚂蚁一般一点点儿在互联网迷雾中摸索;

在这三个个人案例中,开源既是一种业余爱好,也是一种学习途径,还可以时参与项目作为简历上的添彩部分,从而得到工作的机会。

在蓝皮书中把开源解释为

目前的共识是:开源是促进信息技术创新的重要途径,是将源代码、设计文档或其他创作内容开放共享的一种技术开发和发行模式

“开源”应该算是一种个人职业吗?“开源”应该算是一种媒体一样的传播渠道吗?

在我看来“开源”的内涵容量对于我们学生来说似乎太大了,这门课叫《开源软件开发导论》,但是我觉得是不可能在这么短的时间内完全掌握“开源”的,上面三个例子中每个人长时间投入大量精力似乎也只是在开源中管中窥豹。

那么对于我们学生应该如何看待开源在我们个人发展中的作用?就比如程序设计课程更注重对于一门语言的掌握,而一些学院办的讲座更注重学习一些思想。我们学习这门课应该更侧重哪?

继续阅读