这是针对英文原版页面的中文翻译。

Android 和用户的自由

Android 系统在多大程度上尊重用户的自由呢?对看重自由的计算机用户来说,这是对任何软件系统最重要的问题。

通过 自由软件运动,我们开发了尊重用户自由的软件,因此我们和你们可以摆脱那些不尊重用户自由的软件。相反,“开源” 的思想关注于如何开发代码;这是不同的理念,它的基本价值观 不是自由而是代码质量。所以,我们在此关心的不是 Android 是否 “开放”,而是它是否允许用户保持自由。

Android 是一个主要用于手机等设备的操作系统,它由 Linux(Torvalds 写的内核)、一些库、一个 Java 平台和一些应用构成。除了 Linux,Android 版本 1 和 2 的软件主要由 Google 开发;Google 将其按照 Apache 2.0 许可证发布,这是一个非 copyleft 的松散型自由软件许可证。

Android 包含的 Linux 并不是完全的自由软件,因为其中有非自由的 “二进制 blobs”(就像 Torvalds 的 Linux 版本一样),它们中的一些在某些 Android 设备上确实被使用到。Android 平台还使用其他非自由的固件、非自由的库。除此之外,由 Google 发布的 Android 版本 1 和 2 的源代码是自由软件—但是这些代码不足以运行设备。Android 通常附带的一些应用程序也是非自由的。

Android 和 GNU/Linux 操作系统 非常不同,因为它基本不包含 GNU。实际上,Android 和 GNU/Linux 的唯一共同点大概就是 Linux 内核。那些错误地认为 “Linux” 就是指整个 GNU/Linux 组合的人对这些事实感到非常困惑,并自相矛盾地声称 “Android 包含 Linux,但并不是 Linux。”(1)不管这个混淆,情况很简单:Android 含有 Linux,但是不包含 GNU;因此,Android 和 GNU/Linux 大不相同,因为它们的公共部分只有 Linux。

就 Android 来说,Linux 内核仍是一个单独的程序,其源代码使用 GNU GPL 版本 2。要把 Linux 代码放在 Apache 2.0 许可证下会侵犯版权,因为 GPL 版本 2 和 Apache 2.0 不兼容。关于 Google 设法把 Linux 转换到 Apache 许可证的传言是错误的;Google 没有权力改变 Linux 代码的许可证,也没有这样去做。如果 Linux 的作者群允许其按照 GPL 版本 3 发布,那么其代码就兼容 Apache 许可证,并且整个组合可以按照 GPL 版本 3 发布。但是 Linux 并没有这样发布。

Google 对 Linux 遵循了 GNU 通用公共许可证,而 Android 的其他部分使用 Apache 许可证,没有要求发布源代码。Google 曾经说它永远不会公开 Android 3.0(Linux 除外)的源代码。Android 3.1 的源代码也被保留了,这使 Android 3,除 Linux 外,是非自由软件,简单明了。

Google 说保留 3.0 的代码是因为问题太多,还说大家应该等待下一版发布。这个对只想运行 Android 系统的人可能是个好建议,但是用户应该是做出决定的一方。无论如何,希望在自己的版本里加上改动的开发者和钻研者使用有问题的代码也是可以的。

所幸的是,Google 后来在发布版本 4(含源代码)时也发布了 Android 3.* 的源代码。上述问题看来只是临时偏离,而非政策改变。不过,这也是前车之鉴。

不过怎样,Android 各种版本的代码大都按照自由软件发布了。这是不是意味着使用这些 Android 版本的产品就尊重用户的自由了呢?并非如此,有以下几个原因。

首先,它们大多数都包含非自由的 Google 应用,这些应用和 YouTube 以及 Google Maps 等服务通信。虽然它们不是 Android 的正式部分,但这并不是说这些产品就没问题。许多 Android 早期版本的自由应用 被非自由应用替换;在 2013 年,出现了一些 Android 设备,它们若非使用非自由的 Google+ 应用就无法查看照片。在 2014 年,Google 宣布 Android TV 版、手表版和汽车版的大部分都不是自由的。

大多数 Android 设备都会带有非自由的 Google Play 软件(原先叫 “Android 市场”)。此软件邀请用户使用 Google 账号安装非自由应用。它还带有一个后门,Google 可以用它强制安装或卸载应用。(这相当于是个全局后门,虽然未经证实。)Google Play 不是 Android 的正式部分,但是这并未减少其恶。

Google 把许多常规的基础工具都转移到非自由的 Google Play 服务库。如果一个应用本身的代码是自由软件,但是它依赖 Google Play 服务才能运行,那么整个应用程序等效于非自由的;它无法在自由版本的 Android 上运行,如 Replicant。

如果你看重自由,那么你不会想要 Google Play 提供的非自由应用。要安装自由的 Android 应用,你无需借助 Google Play,因为你可以从 f-droid.org 获得它们。

Android 产品也带有非自由库。这些不属于 Android 的正式部分,但是由于有多种 Android 功能依赖它们,所以在实际安装 Android 时它们总在其中。

即使是 Android 正式部分的程序也可能不对应 Google 发布的源代码。制造商可能会修改代码,而且经常不会发布其版本的源代码。GNU GPL 要求它们发布其 Linux 版本的代码,姑且假设他们遵守了。而其余部分使用松散的 Apache 许可证的代码,并没有要求他们发布实际使用的代码。

有一位用户发现其 Android 手机的多个程序 被修改成向 Motorola 发送个人数据。有些制造商会添加一个 诸如 Carrier IQ 的通用性监控软件包。

Replicant 是一个自由版的 Android。Replicant 的开发者替换掉了一些特定设备的许多非自由的软件库。非自由的应用也被剔除,但你肯定不想使用它们。相比之下,CyanogenMod(Android 的另一个修改版)是非自由的,因为它包含一些非自由程序。

许多 Android 设备是 “暴君”:它们被设计成用户无法安装和运行他们自己的修改版软件,只能使用授权公司提供的版本。在这种情况下,这些可执行程序不是自由软件,即便它们是从自由且可被你获得的源代码构建的。然而,有些 Android 设备可以被 “rooted”1,因而用户可以安装不同的软件。

重要的固件或驱动一般也是专有软件。它们处理电话网络无线电、WiFi、蓝牙、GPS、3D 图形、摄像头、扬声器等,有时也包括麦克风。在某些型号上,其中一小部分驱动程序是自由的,还有一些驱动你可以不使用——但是你不能没有麦克风或电话网络无线电的驱动。

电话网络固件是预装好的。如果它只是按照你的需要和电话网络通讯,那么我们可以把它视为一个电路板。当我们坚持计算设备上的软件必须自由时,我们可以放过预装的不再升级的固件,因为对用户来说这个软件和电路板是一样的。

不幸的是,在这种情况下,这将会是一个恶意的电路板。恶意功能无论如何实现都是不可接受的。

在大多数 Android 设备上,该固件控制太多功能以至于它可以把整个产品变成一个监听器。在有些设备上,它控制麦克风。在另一些设备上,它可以通过共享内存完全控制主计算单元,因此就可以忽略或替换掉你安装的任何自由软件。对于某些(也许是所有)型号,有可能对此固件进行远程控制以覆盖设备中软件的其余部分。自由软件的重点在于我们对软件和计算有控制权;有后门的系统显然不符合。虽然任何计算机系统都可能 缺陷,但是这些设备本身 就是 缺陷。(Craig Murray,在 Murder in Samarkand 中,论及他参与的一次谍报活动,通过远程方式将毫无戒心的目标人物的非 Android 便携式手机变成了监听设备。)

总而言之,Android 设备的电话网络固件并不等同于一个电路板,因为其硬件允许安装新的版本而且也在实际运用该功能。由于它是专有固件,实际上只有制造商可以提供新版本——用户不行。

总而言之,我们可以容忍非自由的电话网络固件,只要它的新版本不会被加载、它不控制主计算单元,并且它只能在自由操作系统选择让它通信的时候才能通信。换句话说,它必须等同于一个电路板,而且必须不是恶意的电路板。构建具有这些特性的 Android 手机没有技术障碍,但是我们没有看到这样的产品。

Android 不是一个自托管系统;Android 开发需要在其他系统上进行。Google 的 “软件开发套件”(SDK)看起来是自由的,但是查验这一点很难。某些 Google API 的定义文件是非自由的。安装 SDK 需要签署一个专有的软件许可证,你应该拒绝签署。 Replicant SDK 是一个自由的替代品。

最近对 Android 的新闻报道集中在专利战上。在历时 20 年的废除软件专利运动中,我们一直在警告这样的战争可能会发生。软件专利可能会迫使 Android 的功能被消减,甚至使之不可用。请参看 endsoftpatents.org 了解更多为何要废除软件专利的信息。

不过,专利攻击和 Google 的回应和本文的主题并没有直接的关系:Android 产品如何部分寻求成为一个讲道德的发布系统,以及如何没能实现目标。这个问题也值得媒体关注。

Android 是迈向道德的、用户可控的、自由软件的便携式手机系统的重要一步,但还有很长的路要走,而 Google 正在把它带向错误的方向。黑客们正在着手于 Replicant 的工作,但支持新的设备型号是一项艰巨的任务,加之遗留在固件上的问题。尽管 Android 手机没有 Apple 或 Windows 手机那么恶劣,但它们不能说是尊重你的自由的。

脚注

  1. 这个混淆的极端例子出现在 linuxonandroid.com 网站,该网站提供 “在 Android 设备上安装 Linux [sic]” 的帮助。这是完全错误的:他们在安装 GNU 系统的某个版本,不包括 Linux,因为 Linux 已经是 Android 的一部分。由于该网站仅支持 非自由的 GNU/Linux 发行版,因此我们不推荐使用它。

译注

  1. rooted:此处指获得手机等设备的操作系统管理员权限,即 root 权限。此后就可以安装修改版软件。