时不时使用乱七八糟的东西来跑题的F-Droid介绍
Superbart
2024年12月09日 11:30

本文预计于 2024-12-15 在西电开源社区分享会上由我分享。

大家好,今天我想跟大家分享 F-Droid,一个开源的安卓应用商店。同时以此为出发点,介绍一些相关的东西。

现在开始是对 F-Droid 的定义

什么是 F-Droid

F-Droid 是一个开源的安卓应用商店。

  • 开源:该商店本身以及其上软件均为开源软件。

  • 应用商店:同应用宝一样,是分发软件的地方。

感兴趣的话请从这里下载:https://mirrors.tuna.tsinghua.edu.cn/fdroid/repo/

注意:由于某些原因,官网上不去,只能通过这个镜像站下载。下载后请添加清华源来更新数据库。

开源Android应用的优点(以下部分全为暴论,一家之言)

首先定义开源 Android 软件的定义:

  1. 该软件的代码全部开放,开发过程完全透明。

  2. 源码开放符合 FOSS 标准。(这玩意一会简单介绍一下)

这些软件包括但不限于:

  1. 专有软件的开源重写版本(一般也可称为大号爬虫),举例:PiliPala 是开源的 Bilibili 客户端;Traintime PDA 是电表的开源重写版本。

  2. 小工具:比如 mumath,超级高级的数学计算器;SD-Maid 系统清理器(这软件有年头了讲道理);微风天气,免费且信息完全的天气预报程序,等等。

  3. 部分游戏:DOOM / idTech4 / Mindustery ……(反正也没多少)

这些软件有一些基本特征,至少我认为的:

  1. App 方面不收集隐私:就用大号爬虫举例,如果各位接着用专有的软件,恐怕很多信息都被监控了。我一直觉得有些应用经常读你的剪切板,然后读取您的个人信息。比如也许b站就在读你的剪贴板,知道你在聊啥,然后给你推荐相关视频。或者,天知道他们会发送啥信息到他们的服务器,毕竟不是所有人都有个装 Magisk 模块的手机,以及一个抓包客户端。

  2. 小巧易用:因为一般开源工具都聚焦重点功能,他们不会像部分软件一样为了一碟醋包了顿饺子。比如说,现在很多软件都在集成短视频和社交功能,而忽略了他们本来是个钱包软件和应用商店。

  3. 审美在线:(这个恐怕是我的暴论)感谢成熟的 Material Design 3 部件和体系,有些时候编写页面没必要考虑很多就能写得很好看。同时,由于开源软件很多时候开发时候没有多大压力,写的时候更会用心。但是我觉得很多软件设计过于一板正,SmilyHei 滥用,互联网黑话滥用,看起来过于审美疲劳。

  4. 经常遇到惊喜:毕竟他们存在的很多时候,都是石头间的沙子,搞定某些痛点工程。

理解 F-Droid 的意义

作为一个开发者,当你不管出于啥目的,想要分享你编写的软件,你会怎么做呢?

接下来大致在我国背景下介绍。

  1. 请个公司,或寻找相关部门,处理著作权证书等。

  2. 购买相关云服务,域名等,然后在上面处理备案信息。

  3. 获得上述两个材料,在主流应用商店(华为应用商店,小米应用商店)搞定上架事宜。

以上步骤对于个人开发者,我觉得可能是比较痛苦的。

  1. 如果你开发的是一个本地应用,为了备案搞个服务器是不是不太合适?

  2. (至少小米应用商店)只能接受企业备案,个人备案不允许。(至少酷安)原则上只接受在华为小米等主流平台上架的应用。

  3. (假设你想搞这个)著作权应该花不了多钱,毕竟你自己写的软件。购买国内域名和服务器来搞备案一年也得 300 左右的价格。至少我觉得价格不太合适233

我写了个很简单、能解决生活重要痛点的本地APP,为了分发他我tm得花这么多没必要的成本,甚至要成立公司,至于吗?

我们举个两个例子:

  • 小红经常偏头疼,而且是某种周期性的。她需要一个软件来定期记录一下,寻找一些规律啥的来看医生。她觉得默认的日历程序不咋好用,于是去找,但是死活找不到类似的玩意。

  • 小刚由于工作需要,需要使用尺子和水平仪啥的。有一天出门他没带,找个应急使用的,但是下载完全是广告,甚至用一小下还跳转拼多多。

那么,上架到 F-Droid 是一个很好的主意。唯一的条件就是你的软件需要开源,应该不是问题吧。毕竟,你的软件很简单,简单到没法进行商业化(比如每天小众软件上发行的各种小工具);但是能解决生活痛点,通过一个集中的平台宣传出去,让很多人用到是一件大大的好事。

F-Droid 上面的软件仓库

  1. F-Droid 默认仓库:访问得最多,也是大部分软件首选上架的地方。

  2. IzzySoft 仓库:一些官方软件库的补充,由 F-Droid 开发者之一单独维护。

  3. Guardian Project 仓库:包含很多“保护用户个人隐私”软件的仓库。

接下来介绍 开源定义

关于 FOSS

FOSS:Free 自由 OS Open-Source 开源 S 软件

这里“自由”的意义是不作限制使用,最主要的是商用,也就是用代码创造财富,比如搞售后,魔改后卖出。

基本分成两类:

  • 代码开放,满足微小条件(比如署名)即可随便使用。比如 MIT,3句话BSD,WTFPL 等。

  • 代码开放,但修改版必须以同样的方式开放给别人使用。比如 GPL(沾上了一点就得全部开放),LGPL(用动态库引用不用整体开放),MPL(仅需开放用到的MPL授权代码即可)。

F-Droid 上的“非自由特性”

引述他们的文档:

负面特征被组织成“标记”,打包器可以用它们来标记应用,警告从用户的角度看来可能不受欢迎的行为,这些行为通常服务于开发人员或第三方的利益。想要自由软件的用户也想知道一个应用是否依赖或推广任何专有软件。

也就是说,这些功能或多或少都会让应用“不那么开源”。有些时候不是大问题,但还是说下吧

非自由网络服务:该软件依靠一个不开源的网络服务运行。这个只要联网就很难避免,总不能让 B 站,咱学校一站式服务器后端都开源吧(

举例,Traintime PDA(西电统一认证服务和一站式服务)、PiliPala(BiliBili)、Telegram FOSS(TG 服务器)

非自由依赖项:该软件依靠一些非自由应用来运行。这个一般是给某些软件的东西搞点小提升的。

举例:企鹅通知进化,免 ROOT 优化 QQ 通知,使其变得更加现代化

非自由资产:这个算完全洁癖性质了,软件可运行文件开源,但是有些图片/音乐/数据不能符合上文提到的自由定义。

举例:idTech4A++ 是一个用于运行 DOOM 3、Quake 4、Prey 2006 等 2004-2010 商业大作的游戏引擎,很显然这堆游戏你得去 Steam 花钱买。(顺便 Prey 2006 值得玩一下,但是很难买到)

很多涉及到机器学习的软件,因为里面的模型可不一定让你随便用的。搞 GPT 的应该明白。

上游代码非完全自由:上游代码加入了非自由依赖库,有些时候去不了只能被 F-Droid 除名。

举例:

Pilipalax (上面提到的 Pilipala 加强版)因为引入极验库而被除名。

Danxi(第三方复旦大学学生信息查看应用)F-Droid 版本移除小米推送服务库。

关于 F-Droid 社区

来看看我们 F-Droid 是多么活跃的一个社区啊:

  • F-Droid 论坛是一个讨论自由软件和 Android 生态系统的生机勃勃的地方。在过去 30 天里,它有超过 1000 个帖子。这个规模的论坛依赖于志愿者的管理和维护。

  • 主 F-Droid 存储库目前有 3728 以及总共 10004 个应用版本,而归档存储库有 53768 个这些应用的过时版本。

  • 仅仅在上一周,那个志愿维护者(小)团队在 fdroiddata 仓库中合并了大约 200 个合并请求。这里每一个都可能需要时间,讨论和判断。

  • F-Droid 客户端已被翻译到超过 50 种语言。更进一步,服务器工具,应用元数据,和F-Droid 项目下的很多其它工具也由一个志愿翻译者社区积极翻译。

  • 在 11 月的一周中,本网站(不统计由社区慷慨贡献的很多镜像):

    • 响应了超过 100,000,000 个 HTTP 请求,

    • 处理了逾 500,000 次 F-Droid 商店安装包的下载,

    • 并收到了超过 230,000 次的首页点击。

  • 每天,”checkupdates” 作业都会运行,看看有没有应用的新版本需要构建。一个典型作业为了执行此任务下载了超过 5000 个应用源代码存储库。

  • 一旦发现新版本,一个有 20 个 CPU 和 32GB 内存的构建服务器将构建每个更新的应用,准备发布到你的手机上。

他们的总结:在一个由大型专有应用商店主导的世界中,F-Droid 是自由软件生态系统中的一座灯塔。

现在 F-Droid 的介绍完了,现在跑个题,介绍可重复构建:

可重复构建

此处只给大纲,希望到时候有个白板让我能写写画画。可能由于演讲时间限制导致快速通过,反正我对这玩意也没过深入了解:P

可重复构建是啥:使用标准构建程序和流程,使得相同代码在任何环境下,只要遵守该程序流程,构建产物就完全相同。

好处有很多:完全保证二进制文件的工厂化生产、进一步保证软件供应链安全(因为有签名了),一定程度上利于作者维护软件。

两种情况:

  • 编译时候没有使用和作者相同的环境,导致未知状况出现

  • 编译过程中投毒(比如某 libxz 库),导致染毒二进制出现

如何产生的差异:

  1. 源代码被更改,涉及上游攻击

  2. SDK 编译环境不同

  3. 编译步骤引入时间信息,环境信息等动态信息

  4. 步骤不完全相同,导致最终产物中二进制乱序

详情可以看 https://forum.openeuler.org/t/topic/714 这个文章。

F-Droid 如何构建:

  1. 下载源代码并编译

  2. 下载开发者参考构建,去掉签名后进行二进制对比

  3. 成功则提取开发者签名,附加后发布

感谢各位收听!