部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你在 DeepSeek,我在 deepin Coding

你在 DeepSeek,我在 deepin Coding

作者头像
云水木石
发布2025-02-26 14:42:38
发布2025-02-26 14:42:38
1071
举报
文章被收录于专栏:信创系统开发信创系统开发

2025年春节期间 DeepSeek 带起的人工智能热潮依然滚烫。百度、腾讯、阿里这些巨头纷纷将 DeepSeek 融入到他们的产品中,而更多竞争对手也发布了各自的大模型,宣称已经超越了 DeepSeek。看着这一波接一波的消息,仿佛我们的世界即将被 AI 颠覆:AI 公务员、DeepSeek 推理、一体机AI 智能体、裁员风波等等,消息乱飞,似乎一夜之间人类社会要发生翻天覆地的变化。

作为一名开发者,我自然页会关注与 AI 相关的资讯。然而,接收到的信息多了,心中不免有些困惑:一方面是 AI 的飞速进展,仿佛一夜之间就能代替人类;另一方面,我又被工作中的具体问题而困扰。这段时间没有更新公众号,就是受到工作的影响。这期间我一直被浏览器的系统问题整得焦头烂额,都没有心思去写文章。

说到底,我碰到的就是大多数 C/C++ 程序员不想面对的兼容性难题,特别是随着国产化替代,尤其是在国产化浪潮下,操作系统和硬件平台日益增多,兼容性问题已经成了绕不开的痛点。

系统软件的兼容性问题

随着国产化软硬件崛起,开发者不得不面对更多的平台支持问题。就拿 CPU 架构来说有 x86(x64)、龙芯(LoongArch64、MIPS)、申威(SW64)、ARM(飞腾、华为麒麟等),操作系统则有 UOS(包括 deepin)和麒麟(包括 OpenKylin 等),不同版本的操作系统也在不断变化,像 UOS 有 1050、1060、1070 等版本。只要稍一数,能有几十种软硬件平台的组合。

通常情况下,操作系统和系统库对跨平台的支持做得还不错,作为应用程序开发者,一般不会针对所有平台开发,而是选择主流平台组合,这样就能避免大多数兼容性问题。但是,如果碰到问题,就会是比较棘手的难题。因为同样的代码,在不同的平台上表现不一样,甚至崩溃,一般需要系统开发者配合一起查找问题。

说实话,尽管 Windows 常被吐槽,但从兼容性上看,Windows 做得还是相当不错的。而 Linux 系统版本众多,经常更新,导致兼容性相对较差。

说到兼容性,就不得不提 ABI(应用二进制接口)。ABI 兼容性是指不同版本的库之间保持一致性,确保旧版程序能够在新版库中正常运行。如果 ABI 不兼容,程序很可能会出现运行不正常的问题。

ABI 兼容

动态库的 ABI 兼容性是指不同版本的动态库能保持一致的二进制接口,使得旧版本编译的程序能在新版库环境下正常运行。下面我们来看一下 ABI 兼容的几个关键点:

  1. ABI 定义内容 ABI 包含了数据类型的大小、数据结构的内存布局、函数调用约定(参数传递、返回值处理)、符号命名规则、异常处理机制等。这些细节决定了程序如何正确地传递数据并接收返回值。
  2. 动态库版本管理与符号版本控制 为了确保兼容性,很多动态库(如 glibc)采用符号版本控制机制。通过为每个符号赋予版本号,确保新旧版本共存时,程序会加载正确的版本。
  3. 向后兼容性与 ABI 保持 新版动态库在扩展功能时,不改变原有接口和行为,保持 ABI 向后兼容。开发者在更新库时,要确保原有接口不受影响。
  4. 编译器与链接器的角色 编译时,程序根据动态库的头文件和符号信息生成调用代码,链接器会记录符号和版本信息,确保程序能在运行时加载正确的库。

glibc 和 OpenSSL 在 ABI 兼容性方面做得很好,但问题在于,这些库变得越来越复杂,废弃的接口越来越多,导致库文件越来越大。于是,很多系统开始采用精简版的 C 库,例如 Android 使用 Bionic 库,BoringSSL 则从 OpenSSL 中分叉出来,删除了很多接口,但不提供 ABI 兼容。

由此可见,软件开发也是一个平衡的艺术,需要开发人员根据实际情况进行取舍。

sysroot 与系统兼容

sysroot 是嵌入式开发中引入的概念,指向一个目录,该目录模拟目标系统的根文件系统结构,包含了编译、链接、运行所需的头文件、库文件等。

在嵌入式开发中,开发者通常在一个平台上(如 x86 主机)进行开发,但目标平台可能是另一个架构(如 ARM)。由于平台架构不同,直接在主机上编译的程序无法在目标平台上运行,因此需要使用 sysroot 来确保编译的应用程序能够在目标系统上正常运行。

sysroot 的作用包括:

  • 提供一致性:模拟目标系统的文件结构,确保编译器和链接器使用正确的库和头文件。
  • 支持交叉编译:sysroot 为目标平台提供专用的库路径,确保生成的可执行文件能够调用目标系统的资源。
  • 简化构建流程:通过 sysroot,开发者可以统一管理编译依赖,减少环境配置错误的风险。

Chromium 构建与 sysroot

Chromium 构建系统提供了一个 use_sysroot 选项。当 use_sysroot 设置为 true 时,Chromium 会下载一个 Debian Bullseye 版本的 sysroot 作为编译环境,帮助构建符合“最低公共平台”标准的二进制文件,从而确保它们能够在多个发行版上运行,包括 Debian、Ubuntu、Deepin 等。

Bullseye 的库版本相对稳定,且被多个发行版支持,这使得通过它编译的二进制文件在新版系统中能够兼容运行。Chromium 构建系统会对库依赖和编译选项进行严格控制,避免引入最新系统才有的特性,确保兼容性。

然而,sysroot 也并非万能。虽然它能够解决很多兼容性问题,但也存在一些挑战。例如,浏览器在 ARM 架构下开启沙盒时会崩溃,最终通过升级 sysroot 来解决。随着操作系统和库版本不断更新,如何更新 sysroot 中的库,确保与目标系统保持一致,依然是一个挑战。

玲珑应用解决方案

玲珑应用(Linglong Application)是近年来在国产操作系统中逐步推广的一种应用包格式。关于玲珑应用的介绍请参考我之前的文章:

  • 国产系统之如意玲珑
  • [将 QT 应用程序打包成如意玲珑软件包](将 QT 应用程序打包成如意玲珑软件包)

这里说一说玲珑应用在解决系统兼容性方面的几个突出的优势:

  • 跨平台兼容性:玲珑包可以包含完整的应用程序及其所需的库文件,避免了依赖系统底层库的版本不同而引发的兼容性问题。
  • 简化部署:用户只需下载一个玲珑包,就能够直接在目标操作系统上运行,不需要担心操作系统的版本、库文件等环境问题。
  • 系统资源隔离:玲珑包将应用程序和其依赖封装在一个独立的环境中,避免了与其他系统程序的冲突,提高了系统的稳定性。

结语

在人工智能如 DeepSeek 一样迅猛发展的今天,系统软件开发者依然在跨平台兼容性、系统库 ABI 兼容性和 sysroot 管理等问题上面临挑战。你在 DeepSeek,我在 deepin Coding,尽管我们的方向不同,但我们都在各自的领域努力探索、前行, 我们都有光明的未来。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系统软件的兼容性问题
  • ABI 兼容
  • sysroot 与系统兼容
  • Chromium 构建与 sysroot
  • 玲珑应用解决方案
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档