Page 84 - 《软件学报》2020年第10期
P. 84

3060                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

             可以看出,LFS 及其子项目教育和指导的意义远大于工程实用的意义,项目自身也明确声明,用户根据项目
         指导构建而成的操作系统不是最精简的.要想构建出符合工程需求的系统镜像,用户不仅需要完全掌握 LFS,能
         够灵活应用其提供的框架,同时需要具备足够的系统知识,才能保证正确的配置构建.虽然存在 ALFS 这样面向
         工程的项目,但是社区活跃度不高等因素导致其发展并未达到预期.在软件包依赖(供应)关系方面,LFS 仅仅罗
         列了数量有限的软件包作为示例,而更多的软件包及其之间的关系则需要用户自己去发掘和管理,供应关系可
         靠性的管理和验证更是基本属于空白,若将构建生成的系统直接投入生产环境使用,还存在极大的可靠性隐患.
         2.3.2    Yocto
             该开源项目的初衷,是为了帮助用户构建基于 Linux 的定制嵌入式操作系统,脱胎于 OpenEmbedded 项目,
         后者专注于提供构建系统,目前 Yocto 项目中的构建系统仍然延用 OpenEmbedded 项目提供的构建系统,并由双
         方共同维护.灵活性是 Yocto 项目最为看重的特性之一,项目本身由 3 个重要组件组成,即工具库、发行版构建
         模板(名为 Poky)以及前文提到的 OpenEmbedded 构建系统.内容丰富的工具库可以帮助用户实现诸如自动化构
         建和测试、多芯片支持、编译流程验证、嵌入式系统组件信息验证等功能,并支持不同用户之间共享工具.发
         行版构建模板是一个完整的构建样例,用户可以通过该模板学习 Yocto 的使用方法.此外,通过定制修改该模板
         的内容,用户也可以构建定制化的系统发行版.
             使用 Yocto,用户需要首先定义目标架构、构建策略、补丁等配置细节;之后构建系统会根据配置获取目标
         源码,并根据策略在本地完成编译构建,最终打包为指定的软件包格式(如 deb、rpm 或者 ipk);当所有的软件包
         构建完成,且通过了所有的检测项,构建系统会将所有的软件包打包成定制的软件源;最后,基于该软件源创建
         目标根文件系统镜像.
             从上述流程可以看出,前期用户定义配置对于整个构建流程至关重要.Yocto 抽象出 recipe、layer 等概念,
         对不同功能的构建配置实现封装,用于简化特性定制和功能复用,尽管如此,Yocto 仍然存在较为陡峭的学习曲
         线.此外,值得注意的是,在 Yocto 中,构建配置所描述软件包之间的依赖关系(即本文所称的供应关系),需要由用
         户自定义或直接继承其他用户共享的已有配置,但却缺少有效的工具实现供应关系可靠性的监督和检查.

         3    开源软件供应链

         3.1    定   义

             正如前文所述,当下开源模式盛行,各大 IT 行业巨头都在开源方面投入了大量的人力和财力,这也为他们赢
         得了诸如市场认可度、技术发展主导权等诸多益处.例如,微软公司曾经以 Windows、Office 等闭源软件而知名,
         近两年已在开源社交网站 Github 创建超过 3 200 个开源仓库,共吸引了超过 4 300 名开发者参与其中,产出多达
         20 款成熟的开源软件工具.在这种趋势下,软件开发的模式也发生变化,从之前的单人/单组织独立开发,变成现
         在的多人/多组织协作.在软件模块化设计的加持下,基于他人已发布的开源软件模块,构建自己定制软件的开
         发模式逐渐成为主流,开源操作系统就是这种模式的典型产物.因此,基于开源软件这种特殊的生产方式,同时
         结合第 2.1 节中描述的供应链定义,可以得出:开源软件供应链的核心即是将开源软件模块间的依赖关系,看作
         是一种对操作系统构建的供应关系.为了更直观地描述,可以进行如下概念映射.
             •  商品:交付给最终用户的软件,本文即特指大型复杂操作系统及相关软件包;
             •  制造商:设计实现开源软件模块的个人或组织;
             •  供应商:提供开源软件服务的公司或个人;
             •  仓储:集中托管开源软件的仓库.
             从概念映射可以看出,相较于传统的软件依赖关系模型,开源软件供应链能够更全面地描述软件的构成,除
         去构成软件本身的各个模块外,还引入了模块的开发者、维护者以及获取源等维度.构建开源软件供应链的初
         衷,即是为了解决在当前模式下,如何保证开源软件可靠性的问题.以供应链的视角看待开源软件,我们能够以
         一种新的视角来审视大型复杂软件的构成,使我们更有可能发现软件潜在的可靠性风险,以应对文献[5]中提出
         的挑战.
   79   80   81   82   83   84   85   86   87   88   89