服务器究竟为谁服务?
Richard Stallman 著在网络上,专有软件不是唯一让你失去自由的途径。服务代替软件,或叫 SaaSS,就是另一个让你把计算控制交给别人的途径。
重点是,你可以控制其他人编写的程序(如果它是自由软件),但是你永远不能控制其他人执行的服务,所以原则上在程序能够完成任务的时候,不要使用服务。
SaaSS 意味着使用他人实现的服务来代替运行你自己的软件。该术语是我们用的;其他文章和广告不会使用它,并且他们不会告诉你一项服务是否为 SaaSS。反之,他们可能会用含糊和分散注意力的 “云” 这一术语,它把 SaaSS 和其他一些实践搞在一起,其中有的是滥用,有的还可以。他们说的是 “通过提供服务来交付软件”。通过本页的解释和举例,你就能够分辨一项服务究竟是不是 SaaSS。
背景:专有软件如何拿走你的自由
数字技术能够给你自由;它也能拿走你的自由。第一个对我们自主控制计算的威胁来自专有软件因为其所有者(诸如苹果或微软之类的公司)掌控软件,所以用户无法控制该软件。其所有者经常利用这种不公平的权力植入恶意功能,比如间谍软件、后门和数字权限管理(DRM)(请参考他们宣传的“数字版权管理”)。
我们对此的解决方案是开发自由软件并拒绝专有软件。自由软件意味着,你,作为一个用户,拥有四项基本自由:(0) 按照自己的意愿运行该软件,(1) 通过学习和修改源代码而使软件按照自己的意愿运行,(2) 分发原来软件的拷贝,(3) 分发修改后软件的拷贝(请参看自由软件的定义。)
通过使用自由软件,我们作为用户,拿回了对我们计算的控制。专有软件仍然存在,但是我们能够把他们排除在我们的生活之外,我们已经做到了。可是,现在有另一种方式诱使我们割让对计算的控制:服务代替软件(SaaSS)。看在自由的份上,我们也必须拒绝它。
服务代替软件看起来是怎样的?
服务代替软件(SaaSS)意思是使用服务代替运行程序。具体地,它的意思是有人设置一个网络服务器来从事某种计算工作——比如,修改照片、翻译文稿等等。——然后邀请用户使用该服务器做用户的计算。作为服务器的用户,你会把你的数据发送到服务器,而服务器使用该数据做计算,然后将结果发回给你或者直接以你的名义行事。
SaaSS 涉及哪些活动?
SaaSS,还是不 SaaSS,对 你自己的 计算是有意义的。这究竟是什么意思呢?它的意思就是这个计算本身没有涉及其他人。为了明确 “本身涉及” 的意思,我们来做一个思想实验。
假想你工作所需要的自由软件都有了,相关的数据、计算机算力和容量也都有了。那么你(有了这些前提条件)是否还会在工作中完全用这些计算机做自己的计算,而不和别人的计算机沟通?
如果是的,那么这个活动是 你自己的。因此,看在自由份上,你值得控制这个计算。SaaSS 的概念适用于这类活动,而不是其他活动。
对此类活动,如果你运行的是自由软件,那么你是在控制它。这样做保护了你的自由。不过,通过别人的服务来进行这个计算的话,你就把计算的控制交给了别人。那样就剥夺了你应有的控制,所以我们认为它是不公正的。我们称之为 SaaSS。
反之,如果由于计算的自然属性,你根本就无法在自己的电脑上进行这些计算活动,那么这些计算就不完全是你自己的,而 SaaSS 也就不适用于这个活动。通常,这些计算活动会涉及与其他计算机的沟通,其他人必须要介入。从商店购买商品就是一个典型的例子,这个活动需要有其他人参与(商店)。
如果某个活动是你自己的,那么你要控制该活动就要求你自己运行自由软件,并且在自己控制的电脑上运行。其他方式都是 SaaSS,因为你失去了你应得的控制。这和你运行的原因没有关系。如果你是因为方便采用了其他方法,它是 SaaSS。如果你是因为没法得到自由软件或可控的计算机而采用了其他方法,它也是 SaaSS。
使用 SaaSS 和运行非自由软件的比较
这些 SaaSS 服务器夺取用户自由甚至比专有软件还无情。使用专有软件,用户通常得到可执行文件而不是源代码。这使学习其代码变得困难,所以判断该程序真正的操作变得困难,更改它也变得困难。
使用 SaaSS,用户甚至都没有从事其计算的可执行文件:它在别人的服务器上,用户看不到也摸不着。所以用户不可能弄清楚它做了什么,也不可能改变它。
更进一步,SaaSS自动就导致了和某些专有软件的恶意功能相同的后果。
例如,有些专有软件是“间谍软件”:该程序向外发送用户的计算活动数据。微软的Windows就把用户的活动发送给微软。Windows媒体播放器汇报每个用户观看或收听的内容。Amazon Kindle汇报用户在看哪本书的哪一页以及什么时间。愤怒的小鸟汇报用户的历史位置。
和专有软件不同,SaaSS 不需要秘密的代码来获得用户数据。反过来,用户必须把数据交给服务器才能获得服务。这和间谍软件的效果一样:服务器操作者获得了数据——不必花力气,因为 SaaSS 就是这样的。Amy Webb,从来也没有要发表她女儿的照片,错误地使用了 SaaSS(Instagram)来编辑女儿的照片。最后,照片还是从那里泄露了出去。
理论上,同态加密1可能发展到有一天未来的 SaaSS 服务无法理解用户发来的某些数据。这样的服务可能无法窥探用户;这并不意味着他们不再窥探。再说,窥探用户只是 SaaSS 不公正之处的次要部分之一。
某些专有软件带有全局后门,它允许远程安装软件。例如,Windows就有一个全局后门,微软可以用它强制改变电脑上的任何软件。几乎所有移动电话也都有后门。一些专有软件也有全局后门;例如,工作在GNU/Linux上的Steam客户端允许其开发者远程安装更改后的版本。
使用SaaSS,服务器操作员能够改变服务器使用的软件。他应该能够这样做,因为这是他的电脑;但是其结果和带有全局后门的专有软件是一样的:有人有权不动声色地更改用户的计算。
SaaSS 敌服务通常会按月收费。一个 SaaSS 站点通常不能用另一个站点代替,所以如果用户对一个敌服务不满意,他们并不能轻易换到另一家。当用户开始依赖某一家时,它就开始随意用反复涨价的方式试探用户,逐渐累加到相当可观的价格。我们认为 SaaSS 本身带来自由丧失比金钱花费更糟糕,不过当敌服务让你别无选择时,这钱花得就相当痛苦。因此,即使未曾看透 SSaaS 底线的用户也应谨防上当。
SaaSS 和带有间谍软件及全局后门的专有软件是一样的。它给予服务器操作员凌驾于用户之上的权力,而这正是我们必须反抗的权力。
SaaSS和SaaS
最初我们认为这个有问题的实践是“SaaS”,意思是“软件即服务”。这是一个常用的术语,它是指在服务器上设置软件而不给用户拷贝,而我们认为该术语准确地描述了此类实践的问题所在。
后来我们认识到 SaaS 这一术语有时也用于通讯服务——而此问题并不适用于这些服务。另外,“软件即服务”这一术语不能解释为什么这种实践是不好的。所以我们创造了“服务代替软件”这一术语,它更清楚地定义了这个不好的实践,并且说出为什么它是不好的。
区分SaaSS问题和专有软件问题
SaaSS和专有软件导致类似的有害结果,但是其机制各有不同。对专有软件,该机制是你有软件拷贝,并使用该软件拷贝,但是修改该拷贝是困难/或者是非法的。对SaaSS,该机制是软件进行你的计算,但是你并没有该软件的拷贝。
这两个问题常常令人困扰,这并不仅仅是意外。网络开发者使用含糊不清的术语“网络应用”把服务器软件和运行在本地电脑的浏览器里的程序搞在一起。有些网页会在你的浏览器里安装非平凡的、甚至是大型的JavaScript软件,并且不告诉你。当这些JavaScript程序不是自由软件时,它们就和其他非自由软件一样导致不公正。然而,在这里,我们关心的是使用服务本身。
许多自由软件支持者认为SaaSS问题会由于开发服务器端的自由软件而解决。对服务器操作者来说,服务器端的程序最好是自由软件;如果它是专有软件,那么其开发者/所有者就有凌驾于服务器之上的权力。这对服务器操作者是不公正的,而且对服务器的用户也毫无帮助。但是如果服务器端的程序是自由软件,它也没有保护服务器用户不受SaaSS的影响。该程序使服务器操作者自由,但是没有给服务器用户自由。
把服务器软件的源代码发布可以使社区受益:这使有相应技术的用户可以搭建类似的服务器,也可能修改软件。我们建议使用GNU Affero GPL作为服务器端软件的许可证。
但是这些服务器都没有让你能够控制自己的计算,除非它是你的服务器(你控制它的软件,尽管服务器的硬件可能不是你的)。也许某些工作你可以放心地使用朋友的服务器,就像你让朋友在你的机器上维护软件一样。除此之外的服务器对你都应该是SaaSS。SaaSS总是使你受制于服务器操作者的权力,而唯一的解药是,不要使用SaaSS!不要使用他人的服务器来对你提交的数据进行计算。
这个问题展示了“开放”和“自由”的深度不同。源代码是开源意味着,差不多总是,自由软件。但是,“开源软件”服务,意味着服务器软件是开源或是自由软件,却错失了SaaSS的问题。
服务从根本上不同于程序,由它带来的道德问题从根本上也和程序的不同。为了避免混淆,我们避免把服务描述为“自由”或“专有。”
区分SaaSS和其他网络服务
哪些在线服务是SaaSS?最明确的例子是翻译服务,比如它把英语文字翻译成西班牙语文字。你要翻译这件事纯粹是你自己的计算。你可以通过在自己的电脑上运行一个程序完成。(道义上说,该程序应该是自由软件。)翻译服务代替了该程序,所以这是服务代替软件,即SaaSS。由于它剥夺了你对自己计算的控制,所以它对你作恶。
另一个明确的例子是使用诸如Flickr或Instagram之类的服务来编辑照片。几十年以来,人们都是在自己的电脑上编辑照片;在你无法控制的服务器上编辑照片,而不是在自己的电脑上,就是SaaSS。
拒绝 SaaSS 并不是说要拒绝所有的其他人运行的网络服务。大多数服务器不是 SaaSS,因为它们的任务是和来访者进行某种通讯,而不是为每个来访者做计算服务。
网络服务器最初的概念不是为你——来访者——做计算,而是让你能够访问它发布的信息。即使在今天这也是大多数网站做的事,这个没有 SaaSS 的问题,因为访问别人发布的信息不是在做你的计算。使用博客网站发布自己的成果也不是,使用诸如 Mastodon、StatusNet 或 Ex-Twitter 的服务发布微博也不是。(这些服务可能会有其他问题,根据具体情况而不同。)这个道理对其他非私人的通讯服务也适用,比如聊天室。
究其本质,社交网络是一种沟通和出版的形式,不是SaaSS。然而,如果一个服务的主要设施是社交网络的话,它就可能带有SaaSS的功能和扩展。
如果一项服务不是 SaaSS,并不意味着它就没有问题。服务有其他的道德问题。比如,Facebook 要求使用非自由的 JavaScript 代码,并且它通过让用户展示自己的生活来误导他们对隐私的感觉。这些都是重要的问题,不过不同于 SaaSS。
搜索引擎之类的服务是从网络上收集数据并让你查看。查看他们收集的数据不是普通意义上的用户计算活动—你并没有提供这个收集活动—所以使用此类网络搜索不是SaaSS。然而,使用其他人的服务器为你自己的网站部署搜索设施是SaaSS。
网购不是SaaSS,因为这个计算不是你自己的活动;而是你和商店共同完成的活动。网购的真正问题在于你是否相信收钱的一方以及其他个人信息(从你的姓名算起)。
仓库网站,如Savannah和SourceForge,本身不是SaaSS,因为仓库的工作是发布交给它的数据。
有些网站提供多种服务,如果其中一个不是SaaSS,另一种也可能是SaaSS。例如,Facebook的主要服务是社交网络,这不是SaaSS;然而,它支持第三方应用,其中有些是SaaSS。Flickr的主要服务是发布照片,这不是SaaSS,但是它还有编辑照片的功能,这就是SaaSS。类似地,在Instagram发布照片不是SaaSS,但是使用它来转换照片格式就是SaaSS。
Google Docs 展示了评价一个服务有多么复杂。它让人们通过运行一个大型的 非自由 JavaScript 程序 来编辑文档,明显是错误的,但它不是 SaaSS。然而,它还提供上传和下载标准格式文档的 API。一个自由软件编辑器也可以通过此 API 传输文档。(我们并不知道,不运行非自由的 JavaScript 代码是否可以获得 Google Docs。)无论如何,这个应用场景不是 SaaSS,因为 Google Docs 只是作为仓库来使用。把自己的数据展示给一个公司是一件坏事,但这也只是隐私的问题,不是 SaaSS;依赖某个服务来访问自己的数据也是一件坏事,但它也只是风险的问题,也不是 SaaSS。
另一方面,使用 Goole Docs 服务来转换文档的格式 是 SaaSS,因为你可以使用自己电脑里的合适程序(希望是,自由软件)来完成这件事。
当然,通过自由软件使用 Google Docs 并不常见。最常见的是,人们通过非自由的 JavaScript 程序来使用它,这和使用其他非自由软件一样糟糕。这个场景还可能引入 SaaSS;这取决于哪些操作是 JavaScript 程序做的,哪些是服务器做的。我们不知道,但是由于 SaaSS 和专有软件都对用户作恶,知不知道我们都可以对这个场景作出道德判断。
通过他人的仓库进行发布不会有隐私的问题,但是通过Google Docs发布却有一个特别的问题:不运行非自由的JavaScript代码,你甚至不能在浏览器里查看Google Docs文本。所以,你不应该使用Google Docs发布文档—但是这不是由于SaaSS的原因。
IT 产业并不鼓励用户做这些区分。这就是 “云计算” 这一时髦词汇的用途。该词是如此的模糊不清,以至于它几乎可以表示任何互联网的使用形式。它包含 SaaSS,也包含许多其他的网络使用情况。在一个特定的语境,使用者可能用 “云”(如果是技术背景的使用者)表示脑海里一个特定的意思,但是通常不会解释说该词在其他文章中有其他的意思。该术语引导人们对本应该单独处理的情况进行普遍化。
如果“云计算”有定义,那么它不是一个计算的方式,而是对计算的一种思考方法:一种魔鬼才会考虑的方法,意思是,“不要提问。不要担心是谁控制你的计算或者是谁掌握你的数据。在你吞掉鱼饵之前不要检查藏在服务之饵里的钓钩。要毫不怀疑地相信这些公司。”换句话说,“做一个没有主见的人。”思想里的云就是要阻碍清楚地思考。为了清楚地思考计算,让我们避免使用“云”这个词。
区分租用服务器和SaaSS的不同
如果你租用服务器(真实的或虚拟的),你可以控制其软件,它就不是SaaSS。在SaaSS的情形,其他人决定服务器运行的软件,因而他们控制着你的计算。在你安装服务器软件的情形,你控制着你的计算。所以,租用服务器实际上是你的电脑。此时,我们认为它就是你的。
租用的远程服务器上的数据没有在自己家里的服务器上的数据安全,但是这个是SaaSS之外的问题。
这种服务器租赁有时叫做“IaaS”,但是该术语适用的概念轻视了我们要考虑的重点。
当用户合作或者是一个组织时
至此,我们解释了 SaaSS 是怎么应用到个人的计算的。对这些情况,我们基本澄清了 SaaSS 的概念。SaaSS 对用户合作也是一个问题,这些合作可能是非正式的(比如开发自由软件常常就是),也可能是正式的(比如象 FSF 这样的慈善机构或一个公司)。基本概念类似,但是我们尚未澄清所有情形的边界。
现在看看我们划的界限。
合作活动可能会有网页,通常有服务器托管。服务器对页面访问者的处理通常有道德问题:如果它发送非自由的 JavaScript 代码,那么它是不公正的,而如果它为访问者提供计算,那么它是 SaaSS。
然而,网络服务器的自我运作也会对合作活动带来 SaaSS 问题。网络服务器通常会给来访者提供搜索页面的服务;它是怎么实现该服务呢?如果合作活动在自己的电脑上运行自由软件来匹配搜索关键字,那么它做到了自己控制自己的计算。但是如果它是向 Google(或其他搜索引擎)查询匹配并显示结果,那么合作活动就依赖于 SaaSS 并把自由拱手出让。
使用联合项目的服务器不是 SaaSS,因为你做的计算不是你自己的——它是项目的。例如,如果你修改了 Wikipedia 页面,那么你并不是在做自己的计算;而是你在做 Wikipedia 的联合计算。Wikipedia 控制自己的服务器,但是如果组织或个人使用的是其他人的服务器,那么他们就面临 SaaSS 的问题。
使用简单的软件库不是 SaaSS,因为大多数实际工作(和再发布不同)是在贡献者自己的电脑上完成的。不过,当软件库开始为用户做其他计算时,比如运行测试,那么它就可能越界了。当用户为某个项目做贡献时,这些工作是项目的而不是贡献者的,所以对用户来说这个还不是 SaaSS。但是它对项目来说可能是 SaaSS。然而,如果测试指的是运行项目开发的程序,那么它不是 SaaSS,因为项目还控制着关键的程序执行。
SaaSS问题的应对
只有小部分网站实施SaaSS;大多数网站没有这个问题。但是我们如何应对有这个问题的网站呢?
对简单的情况,你用自己的数据进行自己的计算,解决方法也简单:使用一份你自己的自由软件拷贝。用一份诸如GNU Emacs或自由字处理程序的自由软件来进行自己的文本编辑。使用诸如GIMP的自由软件来编辑照片。如果没有可用的自由软件怎么办?专有软件或SaaSS会拿走你的自由,所以你不应该使用它们。你可以贡献时间或资金来开发一款可以替代专有软件的自由软件。
和其他人结成合作团队怎么样?现在在不用服务器的情况下工作可能有困难,而团队可能并不知道如何运作自己的服务器。如果你要使用他人的服务器,至少不要相信由公司运作的服务器。一纸客户合同对你不是保护,除非你能够侦测到违规并真正起诉,而公司制作的合同可能允许宽泛的滥用。政府可以从该公司强行调取你的以及其他人的数据,正如奥巴马总统对电话公司所做的;还要假设该公司不自愿交出数据,不过美国电话公司是非法为布什政府监听其用户的。如果你必须使用服务器,请使用除了商业关系之外还有其他可信基础的服务器操作方。
然而,长远来看,我们能够构建替代服务器的机制。例如,我们可以构建能够分享加密数据的点对点程序。自由软件社区应该开发分布式点对点程序来代替重要的“网络应用”。按照GNU Affero GPL发布这些程序是明智的,因为它们有可能被某些人转换成基于服务器的程序。GNU工程正在寻求做此开发的志愿者。我们也邀请其他自由软件项目在其设计中考虑这个问题。
同时,如果有公司邀请你使用它们的服务器来做你的计算,不要接受;不要使用SaaSS。不要购买或安装“轻客户端”,这些只是简单的电脑,它们的计算能力是如此之弱,你的计算只能在服务器上真正完成,除非你配合你的服务器来使用这些客户端。使用真正的电脑并把数据限制在该电脑上。为你的自由起见,请用你自己的自由软件拷贝来做计算。
本文第一版发表于 波士顿评论。
不许任何人了解的缺陷。