安卓与用户的自由

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

自由/开源软件运动中,我们开发尊重用户自由的软件,以便我们和您能够摆脱不尊重自由的软件。相比之下,“开源”的概念侧重于如何开发代码;它是另一种思想潮流,其主要价值是代码质量而非自由。因此,这里的关注点不是安卓是否“开放”,而是它是否允许用户获得自由。

安卓主要是一个用于移动电话和其他设备的操作系统,它由 Linux(托瓦兹的内核)、一些库、一个 Java 平台和一些应用程序组成。除了 Linux,安卓 1 和 2 版本的软件大多由谷歌开发;谷歌在 Apache 2.0 许可证下发布了它,这是一个宽松的自由软件许可证,没有版权保护

安卓中包含的 Linux 版本并不完全是自由软件,因为它包含非自由的“二进制 blob”(就像托瓦兹的 Linux 版本一样),其中一些确实在一些安卓设备中使用。安卓平台也使用其他非自由固件和非自由库。除此之外,谷歌发布的安卓 1 和 2 版本的源代码是自由软件——但这些代码不足以运行设备。通常与安卓一起提供的一些应用程序也是非自由的。

安卓与 GNU/Linux 操作系统非常不同,因为它几乎没有包含 GNU 的内容。事实上,安卓和 GNU/Linux 之间唯一共同的组件是内核 Linux。错误地认为“Linux”指的是整个 GNU/Linux 组合的人会被这些事实搞得一团糟,并做出自相矛盾的陈述,例如“安卓包含 Linux,但它不是 Linux。”(1) 如果没有这种困惑,情况很简单:安卓包含 Linux,但不包含 GNU;因此,安卓和 GNU/Linux 大部分是不同的,因为它们之间唯一的共同点是 Linux。

在安卓中,Linux 内核仍然是一个独立的程序,其源代码在 GNU GPL 版本 2 下。将 Linux 与 Apache 2.0 许可证下的代码组合在一起将构成版权侵权,因为 GPL 版本 2 和 Apache 2.0 是不兼容的。有关谷歌以某种方式将 Linux 转换为 Apache 许可证的传言是错误的;谷歌无权更改 Linux 代码的许可证,也没有尝试这样做。如果 Linux 的作者允许在 GPL 版本 3 下使用它,那么该代码可以与 Apache 许可的代码组合在一起,并且该组合可以在 GPL 版本 3 下发布。但 Linux 并没有以这种方式发布。

谷歌遵守了 Linux 的 GNU 通用公共许可证的要求,但安卓其余部分的 Apache 许可证不要求发布源代码。谷歌表示,它永远不会发布安卓 3.0 的源代码(除了 Linux)。安卓 3.1 的源代码也被保留,这使得安卓 3,除了 Linux,完全是非自由软件。

谷歌表示,它保留 3.0 源代码是因为它有错误,人们应该等待下一个版本。对于那些只想运行安卓系统的人来说,这可能是一个好建议,但应该由用户来决定这一点。无论如何,想要将某些更改包含在他们自己的版本中的开发人员和修补匠可以很好地使用该代码。

幸运的是,谷歌在发布 4 版本(也带有源代码)时,后来发布了安卓 3.* 的源代码。上述问题结果证明是一个暂时的异常,而不是政策转变。但是,发生过一次的事情可能会再次发生。

在任何情况下,各种安卓版本的大部分源代码都已作为自由软件发布。这是否意味着使用这些安卓版本的产品尊重用户的自由?不,原因有几个。

首先,它们中的大多数都包含用于与 YouTube 和谷歌地图等服务对话的非自由谷歌应用程序。这些官方上不属于安卓的一部分,但这并不能使该产品变得可以接受。早期安卓版本可用的许多自由应用程序已被非自由应用程序取代;在 2013 年,出现了安卓设备,它们除了通过非自由的 Google+ 应用程序之外,没有其他方式查看照片。在 2014 年,谷歌宣布用于电视、手表和汽车的安卓版本将在很大程度上是非自由的。

大多数安卓设备都带有非自由的谷歌 Play 软件(以前称为“安卓市场”)。该软件会邀请拥有谷歌帐户的用户安装非自由应用程序。它还带有一个后门,谷歌可以通过该后门强制安装或卸载应用程序。(这可能使其成为通用后门,尽管尚未证实。)谷歌 Play 官方上不属于安卓的一部分,但这并不能使其变得更好。

谷歌已将许多基本通用设施移至非自由的谷歌 Play 服务库。如果应用程序自身的代码是自由软件,但它依赖于谷歌 Play 服务,那么该应用程序作为一个整体实际上是非自由的;它无法在自由版本的安卓上运行,例如 Replicant。

如果您重视自由,您就不需要谷歌 Play 提供的非自由应用程序。要安装自由的安卓应用程序,您不需要谷歌 Play,因为您可以从f-droid.org获取它们。

安卓产品还带有非自由的库。这些官方上不属于安卓的一部分,但由于各种安卓功能依赖于它们,因此它们是任何真正的安卓安装的一部分。

即使是官方上属于安卓一部分的程序也可能与谷歌发布的源代码不符。制造商可能会更改此代码,而且他们通常不会发布其版本的源代码。GNU GPL 要求他们分发其 Linux 版本的代码,假设他们遵守。在宽松的 Apache 许可证下,其余代码不要求他们发布他们实际使用的源代码版本。

一位用户发现,他手机中安卓系统中的许多程序被修改为将个人数据发送给摩托罗拉。一些制造商添加了一个隐藏的通用监视软件包,例如 Carrier IQ。

Replicant是安卓的自由版本。Replicant 开发人员已经替换了某些设备型号的许多非自由库。非自由应用程序被排除在外,但您当然不想使用它们。相比之下,CyanogenMod(安卓的另一个修改版本)是非自由的,因为它包含一些非自由程序。

许多安卓设备都是“暴君”:它们的设计使得用户无法安装和运行他们自己修改的软件,只能运行某些公司批准的版本。在这种情况下,即使可执行文件是由您可获得和使用的自由源代码制成的,它们也不是自由的。但是,一些安卓设备可以被“root”,因此用户可以安装不同的软件。

重要的固件或驱动程序通常也是专有的。这些处理手机网络无线电、WiFi、蓝牙、GPS、3D 图形、摄像头、扬声器,在某些情况下还包括麦克风。在某些型号上,其中一些驱动程序是自由的,并且有些您可以不用——但您不能没有麦克风或手机网络无线电。

手机网络固件是预安装的。如果它的所有作用只是在您希望时静静地坐在那里并与手机网络对话,我们可以将其视为等同于电路。当我们坚持计算设备中的软件必须是自由的时,我们可以忽略永远不会升级的预安装固件,因为它对于用户来说,它是一个程序而不是电路没有任何区别。

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

在大多数安卓设备上,此固件拥有如此多的控制权,以至于它可以将产品变成一个窃听设备。在某些设备上,它控制着麦克风。在某些设备上,它可以通过共享内存完全控制主计算机,从而覆盖或替换您已安装的任何自由软件。对于某些(也许是全部)型号,可以远程控制此固件,以覆盖设备中的其余软件。自由软件的意义在于我们控制我们的软件和计算;一个带有后门的系统是不合格的。虽然任何计算系统都可能漏洞,但这些设备可能本身就是漏洞。(克雷格·默里在《撒马尔罕谋杀案》中讲述了他参与的一项情报行动,该行动远程将一个毫无戒心的目标人物的非安卓便携式手机变成了一个窃听设备。)

无论如何,安卓手机中的电话网络固件并不等同于电路,因为硬件允许安装新版本,而且实际上也确实如此。由于它是专有固件,实际上只有制造商才能制作新版本——用户不能。

将这些要点结合起来,我们可以容忍非自由电话网络固件,只要它不会加载新版本,它不能控制主计算机,并且只有当自由操作系统选择让它通信时才能进行通信。换句话说,它必须等同于电路,并且该电路不能是恶意的。构建一个具有这些特性的安卓手机在技术上没有任何障碍,但我们不知道有任何这样的手机。

安卓不是一个自托管系统;安卓的开发需要在其他系统上进行。谷歌的“软件开发工具包”(SDK)中的工具似乎是自由的,但要检查这一点很困难。某些谷歌API的定义文件是非自由的。安装SDK需要签署专有软件许可协议,您应该拒绝签署。Replicant的SDK是一个自由的替代品。

最近关于安卓的媒体报道集中在专利战上。在为废除软件专利进行20年的活动中,我们警告说这种战争可能会发生。软件专利可能会迫使从安卓中删除某些功能,甚至使其无法使用。请参阅endsoftpatents.org以获取更多关于为什么必须废除软件专利的信息。

然而,专利攻击和谷歌的回应与本文的主题没有直接关系:安卓产品在多大程度上接近一个符合伦理的发行系统,以及它们如何未能达到要求。这个问题也值得媒体关注。

安卓是朝着符合伦理的、用户控制的、自由软件便携式手机迈出的重要一步,但还有很长的路要走,而谷歌正朝着错误的方向前进。黑客正在开发Replicant,但支持新的设备型号是一项艰巨的任务,并且仍然存在固件问题。即使今天的安卓手机比苹果或Windows手机要好得多,也不能说它们尊重您的自由。

脚注

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