软件的耐久性
这个段落位置已不存在。请使用目录或当前章节查找内容。
The Durability of Software — Seth Erickson and Christopher M. Kelty(塞思·埃里克森、克里斯托弗·M. 凯尔蒂)
软件既非物质的,亦非非物质的,而是耐久的、被固着的、被搭建支架的。本文提出,应当透过服务与软件所呈现的多种多样的耐久性与时间性形式来理解它们。我们借用演化与发育的概念,但以批判的眼光关注对价值(诸价值)的诊断以及持续维护的必要性。我们考察了多种不同案例:基础设施软件、军事软件、操作系统与文件系统。
我们本周的目标,是把"糊状件"(mushyware)转化为固件(firmware),把我们的产品从果冻变成晶体。 (艾伦·J. 珀利斯[Alan J. Perlis],见 NATO, 138)
一条软件腔棘鱼
2014 年 4 月,一期《60 分钟》(60 Minutes)节目短暂地引起轰动:它披露美国处于战备状态的核武库仍在使用"古董级"的软件和硬件,例如软盘、缩微胶片和射线照相数据,以及编写于 1970 年代的软件。互联网上的人们纷纷嘲笑这些无可救药的过时技术;当约翰·奥利弗(John Oliver)在《上周今夜秀》(Last Week Tonight)中向现场观众展示一名导弹操作员手持 8 英寸软盘的图片时,观众席中传来清晰可闻的惊呼。奥利弗的评论是:"我的天!这些东西看起来连跑《俄勒冈之旅》(Oregon Trail)都勉强,更别说毁灭地球的武器了。"
许多习惯了持续更新、快速发布周期、Beta 测试和自动升级的人觉得这则报道令人震惊——而且是发自本能的震惊,因为它涉及的是地球上最致命的武器。正如《Vice》的一篇文章引用杰克·温斯坦少将(Major General Jack Weinstein)的话所说,"一线希望"在于"[去年分析该网络的]网络工程师发现,就其开发方式而言,这个系统极其安全、极其可靠"(Richmond 2014)。因此,这里的戏剧性张力来自某种未言明的东西(较新的技术总是比旧的遗留系统更安全、更好、更高效)与某种直觉性的东西(不把这些武器连上互联网是非常明智的)之间的冲突。
运行这些 1970 年代"民兵"(Minuteman)导弹发射控制系统的软件和硬件系统,是一种技术上的腔棘鱼(coelacanth):一块活化石。它与外界隔绝,经过高度工程化,(但愿)受到严格维护,却从未被升级或改动。与之形成对照的,是我们可以视为当代软件之慈鲷(cichlids)的那些东西:每小时都在涌现的移动应用、游戏、网站、API 和服务,它们更新不断,灭绝速度也同样迅速。[1] 软件即服务(SaaS)、面向服务的架构(Service-oriented Architecture, SOA)或云的兴起,似乎暗示着一种朝向某种超不稳定性的质变正在发生:不再有稳定的程序,只剩下跨越界面与设备的查询所构成的临时关系,使原本就是非物质的东西变得更加缥缈、更加如烟似雾。由此似乎可以推论,我们的经济和文化也正变得同样"云化"——不稳定、不确定、疏远、契约化。
这种表面上的转变——从软件到服务——提出了一个问题:二者有区别吗?区别何在,又如何最好地描述这种区别?一方面,人们可以断言二者根本没有区别,因为服务的概念从一开始就内建于软件之中。事实上,在"软件"这个词或这个对象出现之前,就已经存在编程服务了。[2] 软件必须经过拆分捆绑(unbundled)和产品化,才获得了我们通常归于 Microsoft Word 或 Adobe Creative Suite 之类事物的那种稳定性与单一性。无论是 1960 年代的计算机公用事业(computer utility),还是 1980 年代 Sun 公司宣称"网络就是计算机"时的瘦客户端与网络 PC(netPC),服务一直以来都是人们持续追求的目标。另一方面,今天的服务看起来又相当不同:重新配置的便捷、访问的开放、运作的标准化,以及对"数据中心即计算机"模式的依赖,似乎都把软件、数据库、档案,乃至整个公司,变成了信息、查询或控制的短暂通道。稳定的产品化软件消失了,取而代之的是不稳定的契约安排——Adobe Creative Suite 变成了 Adobe Creative Cloud,Microsoft Word 变成了 Office 365——伴随着从所有权意识到服役(servitude)意识的转变。
然而,想要确定二者之间区别的这种欲望,落入了一个本体论陷阱——它要求二者的区别是关于属性与种类(以及权利)的抽象区别,而不是人类之间的时间性与使用上的区别。软件研究(software studies)时常受困于一种语文学幻想,即认为软件的运作条件被可编程性所辖域化(territorialized),而不是认为软件的可编程性被时间所恐吓(terrorized)。因此,软件与服务是一组相互纠缠的操作,最好从绵延(duration)与时间性的视角,特别是从演化框架的视角来看待,而不是从代码、通道、电路、网络,或其他那些偏重空间性、或偏重依赖空间性来理解对象的智识抽象的视角来看待。
于是,在"民兵"导弹软件这条腔棘鱼与 Apple App Store 中的慈鲷之间,存在着一整个谱系的软件,它们处于不同的时间性之中,具有不同程度的耐久性。演化的进路在此是合理的,但不仅仅是为了描述这种多样化,而是为了批判性地分析价值与诸价值——最核心的是新颖性,但也包括安全保障(security)、安全(safety)、自由、健康或风险——在何处以及如何构造着这些时间性。"演化并不是随便什么变化与停滞,而是变化与停滞的特定模式,即倾向于保存祖先的模式"(Wimsatt and Griesemer 2007, 283,强调为引者所加)。
转向演化观念的绝不止我们——创造软件的人和研究软件的人都常常这样做。例如,在软件工程领域内,软件演化的语言常常取代了修理和维护的语言。[3] 而所谓"人工生命"(artificial life)的研究者长期以来陷入一种幻想,认为程序既然会演化,就必定是活的(Helmreich 1998; Riskin 2007)。最近,列夫·马诺维奇(Lev Manovich)等人采用了一种宽泛的演化论语言——但他坚称只是作为隐喻——来解释媒介制作软件领域中随时间推移的变化(Manovich 2013)。
我们对演化理论的探索不是隐喻性的,而是批判性和分析性的,也就是说:如何以差异化的方式分析软件的种群,以便诊断在软件之中、透过软件发挥作用的价值、意识形态或文化技术。我们关注的焦点不是代码或程序,而是软件的种群——用工程师的话说,即软件的装机基础(installed base),这必然意味着一个由用户、设计者、维护者以及必须保持运转(即被变得耐久)的组织和物理设施所构成的生态。
软件的耐久性不是某个特定软件程序或服务的内在特征,也不是某种抽象可编程性或数学面向的特征,而是它被嵌入一个由意图与期待构成的社会、经济和文化场域之后所具有的特征——在那里,它以不同的方式生成。"民兵"导弹发射井保持稳定的原因,不同于 Linux 内核的"稳定性"(后者经常变化,而其名义正是为了维持一种能够容纳不可知范围的可能用途的稳定性)。像 Facebook Connect 这样的服务的生成,与《牛津英语词典》(Oxford English Dictionary)提供的简单查询 API 大不相同。二者都是服务,都依赖于金钱以及在乎它们的人——但它们演化与停滞的动力学彼此迥异。
因此,演化不仅仅是一种关于变化或绵延的理论——它还关乎过去的某些方面如何在不同生态中被差异化地保存下来。软件并非在任何地方都以同样的方式演化——它像生命一样不断地多样化。认识到变异、异质性以及过去在现在中的保存,可以发挥重要的分析与批判功能:辨识出那些令某些系统保持稳定、缓慢变化,同时又要求另一些系统似乎以"思想的速度"变化的价值、意识形态和文化技术。
软件不是非物质的——对任何研究它的人来说,这一点都很清楚。但软件也不是一种实体(substance)。软件被服务所取代——如果这种取代确实正在发生的话——与其被解释为一种本体论或物质上的转变,不如被解释为并发、依赖与耐久性关系上的转变——软件同样具有"存在模式"(modes of existence)(Latour 2013)。
在本文中,我们从发育-演化理论中借用两个概念来思考软件中变化与停滞的模式:生成性固着(generative entrenchment)与支架(scaffolding)。温萨特(Wimsatt)与格里斯默(Griesemer)使用这些术语,是为了论证对文化演化和生物演化的一种发育性理解,以反对严格以基因/模因为中心的(á la Dawkins,道金斯式的)理解或"双重遗传模型"(dual-inheritance model)(Richerson and Boyd 2005)。这一点恰如其分,因为一个具体事实是,软件总是与"开发"(development,亦即"发育")一词相搭配——尽管我们应当小心地把"软件的发育生物学"与作为一种既定方法论的软件开发区分开来。我们在此主张,耐久性——或许甚至是周晓菁(Wendy Hui Kyong Chun)所说的"持久的短暂性"(enduring ephemerality)(Chun 2011, 167–173)——是稳健性(robustness)与生成性固着的结果,也就是说,当软件成为基础性的,或以其他方式被锁定于一个由用途和期待构成的网络之中时——其标志是维护(我们分析中的另一个关键术语)——并且受特定的文化和经济价值(诸价值)所驱动。正如软件专业人士常常认识到的,软件的维护并不完全等同于维护一座桥梁或一条高速公路:它无关磨损,也无关软件某些部分的失效。毋宁说,它关乎让软件与其他软件和系统中发生的变化及依赖关系保持同步(Ensmenger 2014)。
层、栈、固着、支架
在大多数工程教科书中,信息系统被分层为栈(stack)——通常是一个金字塔——物质的、物理的层位于底部,越往上越短暂缥缈。[4] 这样的层确实存在,但它们几乎从来不会如此清晰。事实上,修改一小段软件有时可能比修改它据称所层叠或堆栈于其上的硬件或基础设施更困难、更昂贵或更危险。生成性固着是发育性纠缠的真实特征,它恰恰凭借被纠缠的部件或功能的必要性而生成创新。[5] 这些纠缠如何形成,并非预先注定或机械的:这是有待历史研究的问题——研究一个项目的发展、软件的传播、指导它们(或未能指导它们)的标准、对系统中其他组件之未来的期待所形成的依赖,以及围绕特定软件系统以力线(lines of force)组织起来的诸价值。
支架作为一个概念,服务于相关的分析目的。在建筑中,支架是必需的,但在结构完工后最终会消失(尽管它常常为了维护而再次出现)。在发展心理学中,当人们提供边界,使他人能够在其中学习和发展技能时,支架就发生了。随着他们重复这些技能,边界就变得不那么必要了。在软件测试过程中,也发生着类似的事情:代表这些边界的工具(用例、测试套件、浏览器之类的不同软件环境,或常见的失效场景)被围绕着软件构建起来,以测试它如何回应——随着软件被修订和改进,这些测试系统被拆除并消失。随着软件趋于稳定、变得更加稳健,它便在其他软件系统和工具之间被生成性地固着下来。这一过程的某些方面,体现在软件工程中普遍被称为"自举"(bootstrapping)的过程之中:使用一个软件系统去设计或构建另一个补充或取代它的系统。同样,Beta 测试也可以被解释为把真实用户(或早期采用者)用作支架。
诉诸这些发育-演化概念,并不只是为了描述纯粹的动力学,无论复杂还是简单。毋宁说,通过辨识动力学与模式,我们可以展示价值与逻辑如何运作:某些被固着的软件得到维护,而另一些则没有;而维护意味着一组需要批判性阐释的价值(Jackson 2014; Orr 1996)。并非所有软件都因为具有经济价值而得到维护——例如"民兵 III"导弹系统,或运行电网的软件。不维护它们或许会产生经济影响,但它们得到维护主要是基于其他价值:安全保障、安全、健康、流动性、保密等。[6] 即便是"已归档"的软件也必须得到维护,并代表着特定的价值:保存、恢复、证据(Kirschenbaum 2008)。
超越新与旧
软件世界存在巨大的多样性,这不应令人意外。令人意外的是,除了旧的、过时的或废弃的与"前沿的"或新的这套语言之外,我们没有好的方法来为软件分类——或研究它。创新的语言偏重线性与渐进,而非多样性的扩散或不同时间性之间的互动。新颖性或创新之价值的至高地位,是一种特别现代主义的、西方的观念:不惜一切代价追求新颖!它还隐含着一个相似而又相反的错误:把旧事物同样看作线性和渐进的——被沉积、被归档、被遗忘、需要不断更新。事实上,演化的视角要求我们感知到新颖性无处不在,并以许多持续存在的不同形式出现:过去并未被取代,而是被保存下来,以差异化的方式回应着一个不断变化的生态(这个生态由其他同样既新又旧的事物所构成)。
因此,关键的批判或分析时刻不在于辨识新事物,而在于辨识一个独特的种群——一种策展式的操作——即围绕一组同类实例划定边界,使多样性与分化得以显现。几个例子或许可以为如何研究软件指出一条不同的道路。
首先:特定的操作系统(OS)种群可以说是我们软件生态中最被固着——也最具生成性——的方面。它们有多种形态,从面向消费者的 iOS 和 Android 移动操作系统(大约有 10 年历史)到源自 UNIX 的操作系统(大约有半个世纪历史)。此外还有各种在某些方面既旧又新的种群。OpenVMS 和 Alpha 操作系统最初是在 1970 年代为 DEC-VAX 计算机设计的,但至今仍以旧的、新的、更新的、仿真的和迁移的形式在使用;OpenVMS 运行着印度铁路(India Railways)的订票系统以及巴黎地铁(Paris Metro)自动化无人驾驶的 14 号线。[7]
同样,被固着的编程语言(COBOL 和 FORTRAN)处于"千年虫"(Y2K)恐慌的核心。尽管预言中的末日并未到来,它确实揭示了维护软件的问题——既包括其成本,也包括要使被固着的软件脱嵌所必需的那类价值(在此例中是对末日的恐惧)。军事系统、公共基础设施、工厂过程控制(SCADA)系统,都包含着各种形式的固着与依赖——其中一些以戏剧性的方式暴露出来(例如震网[Stuxnet]病毒的案例),另一些则只是通过维护或故障才缓慢地显露。
固着与支架也有助于理解软件程序员所使用的各种基础工具——从 gcc 之类的编译器到编程语言、库及其绑定(bindings)。后者——语言绑定——是生成性固着的一个好例子。操作系统中常用代码的库通常用特定语言编写,例如 C、C++ 或汇编语言,这往往是为了便于重用,有时也是为了让代码更高效(例如,用 C 实现的算法可以比用 Perl 实现的运行得快得多)。但由于这些库"固着"在操作系统之中,它们便"生成"了对绑定的需求:即访问某个库、有时为了在另一种编程语言中使用而重新编译该库的代码片段。旧技术为新技术"搭建支架":程序员需要用另一种语言重写一个程序(无论是为了效率还是优雅,或是为了访问一个被固着的系统的某些部分)的故事,就是支架过程的日常证据。
事实上,到 2015 年,用于快速构建和部署软件的一系列新编程语言和框架,已经织就了庞大而脆弱的固着与相互依赖之网。Drupal 和 Ruby on Rails 之类的 Web 编程框架正在快速演化——底层的编程语言(如 Ruby 和 php)相对较新,框架本身也随着开发者完善其 Web 开发方法而不断演化,而且(或许最重要的是)用于扩展这些框架的各个模块和插件导致了一种"依赖地狱"(dependency hell)。一位评论者(Hartig 2014)在反思软件中的这种历史差异时说:"编译一个 20 多年前的 C 程序,实际上比让一个去年的 Rails 应用跑起来要容易得多。"这清楚地表明,正如演化理论所预言的,创新是大量的,但未必是有利的。
有些种类的软件并没有被生成性地固着,即便它们在时间中持续存在或保持耐久。"民兵"导弹基地就是一个例子——没有任何其他软件或硬件依赖于为控制那些导弹发射设施而创建的软件,但它仍作为一个封闭系统被耐久地维护着。
另一些软件之所以得到维护,是因为它在技术上和文化上都被固着了。以使文件这一抽象成为可能的整套软件系统为例:文件系统、内存分配、属性与权限,以及目录层级。正如一份微软技术报告(Harper et al. 2011)的作者所指出的,文件作为一种带有相关属性(例如所有权、权限)和规范操作(复制、编辑、删除)的数据单位,这一概念已被证明极为稳健,在过去四十年里几乎没有变化。大多数操作系统都是围绕文件构建的,文件管理着内存的分配和对数据的访问;管道和文件是 UNIX 设计的核心,UNIX 把一切都当作文件,包括打印机之类的外部设备(通过设备文件访问)。人类也是围绕文件构建的:我们期待文件以特定方式运作,期待它们稳定、可查找、可拥有、可共享。
尽管文件似乎是一个本质性的概念,它却受到面向服务的计算或云计算的挑战——在那里,一种新的"社交"数据与文件相关联,文件同时存在于多个设备上。在这种情况下,被固着的与其说是某段特定的软件代码,不如说是一种本质性的"抽象"(以及一组隐含的可互操作组件),它既固着在硬件中,也固着在用户的期待中。它之所以是生成性的,是因为文件无法简单地被整体(in toto)替换,而必须在特定价值的指引下被"逐片"(piecewise)重新设计。
布兰谢特(Blanchette)关于谷歌文件系统(Google File System)的例子(2011)表明,即便文件已不复从前,我们仍然需要这种抽象,作为让文件在一组虚拟化服务器上显得可操作且稳定的方式(从而保存它,并进一步固着它)。工程师们或许会同意存在"更好的"做事方式,但文件无法如此轻易地从人类意识和机器意识中脱嵌出来。
但是:它正在改变。支架可以帮助我们看到它如何改变。iOS 和 Android 操作系统都向用户"隐藏"了文件。文件尚未消失——操作系统仍然依赖它们——但它们被嵌入应用之中,而应用已迅速成为大多数设备上与软件交互的主要方式(Apple 2014)。在手机或 iPad 上"打开一个文件"非常困难,因为系统被设计为把文件及关于文件的元数据隐藏在应用内部——如今,应用被设定为人类所面对的主要抽象。然而,在大多数情况下,应用并不要求用户打开或关闭重要文件,它们通过把东西放进应用之中(以及"放进云端")来解决"我的东西在哪儿?"的问题。这就形成了一种支架,借此用户可以从"应用打开文件"的理解转向"应用拥有与用户、账户和设备绑定的数据与资源"的理解。有些种群比另一些变化得更快。
然而,这一转变并不只是一个演化事实。毋宁说,通过理解文件与应用的生成性固着和支架,我们能够以更具批判性的眼光审视那些否则只会被称为技术或工程问题的东西。除其他方面外,文件抽象支撑着一种特定的财产权模式,在这种模式中,数字对象实际上是围绕稳定的财产所有权来设计的:文件必须有所有者和权限。相比之下,应用是围绕另一种权利与法律场域来设计的:合同与服务条款——具体而言是不可协商的合同,其中应用提供者享有的权利远多于应用用户。
这就是处于从软件到服务之转变核心的"文化技术"(cultural technique):20 世纪的知识产权法是为固定于"有形媒介"之中的无形财产,以及在《留声机、电影、打字机》(Gramophone, Film, Typewriter)的时代媒介得以如此固定的无数方式而设计的(Kittler 2006)。相比之下,合同法所关乎的不是无形之物与有形之物之间的关系,而是一种信任关系的固定期限,以及一种以责任与义务来构造未来的方式。这不是非此即彼的情形,但随着越来越多的用户订立合同而非购买财产,软件本身也在发生变化,以支持这种文化实践。
结句:遗留
"遗留"(legacy)一词在信息技术史上有着精确的含义。遗留系统是每个 IT 经理的梦魇;它们是锁定(lock-in)的原因,是专有软件之恶的象征;它们是千年虫的根源、网络安全的祸害,它们代表着企业资本主义之恶,代表着自由软件和开源(Open Source)经常与之交战的那种支配。
但如果演化是"保存祖先的变化与停滞的特定模式",那么遗留就无路可逃。不过,并非所有遗留都同样重大,正如并非所有遗产都同样丰厚。如果我们想要声称像 SaaS 这样的创新确实代表着与过去的某种断裂,那么我们最好更深入地理解祖先在软件系统中曾经以及正在如何被保存。恰恰相反——某些服务将会被固着下来;今天看似灵活的解决方案栈(solution stack),就是明天的遗留系统。更重要的是,不存在单一的遗留,而只存在一种差异的模式:一种相对于环境的多样化。如果我们想要分析这些差异所造成的差异,就必须不再把软件当作实体——无论是物质实体还是思想实体:程序、代码、算法。
行动者网络理论(Actor Network Theory)在这里提出了一个简单的观点:我们既不生活在一个以人类为基础的世界中,也不生活在一个仅由机器的自动性所运行的世界中,而是生活在一个由关系与模式构成的世界中。软件所造成的差异,取决于它如何被嵌入我们诸联结(associations)之间的关系——但它并非在任何地方都以同样的方式被嵌入。软件的效果——它所造成的差异——取决于在任一给定案例中起作用的"保存祖先的变化与停滞的模式"。
以支架和生成性固着来思考,或许可以成为一剂解药,对抗在大众思想和学术思想中都极为常见的那种无休止的反人文主义目的论。这种目的论——一种新斯宾塞主义(neo-Spencerianism)——受到各种权威评论和批评的驱动,它们要求软件(以及广义上的技术)服从一条不断复杂化、不断加速进步的法则,其终点要么是某种想象中的全能资本主义的统治,要么是某种幻想中的自主人工智能所带来的解放-毁灭。[8] 这种"持续加速变化的叠句"(Refrain of Constantly Accelerating Change)包含一定的真理——软件确实促成了新的模式、新的耐久性——但它忽视了世界中多样性的存在,以及多样性保存祖先的方式。把软件演化视为一个在制度上和文化上都具有异质性的对象,或许能让我们批判性地诊断其真实效果,而不是急于奔向下一个新事物,宣告它突如其来的统治地位以及其余一切的无关紧要。
我们感谢 Part.Public.Part.Lab 的成员们富有价值的交谈与反馈,感谢伊里娜·卡尔德拉克(Irina Kaldrack)和马丁娜·莱克(Martina Leeker)的犀利评论,并感谢吕讷堡大学(Leuphana University)数字文化研究实验室(Digital Cultures Research Lab)邀请我们撰稿。
参考文献 (References)
Apple. 2014. "File System Basics." iOS Developer Library. Accessed May 23, 2015. https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/File SystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html.
Blanchette, Jean-François. 2011. "A Material History of Bits." Journal of the American Society for Information Science and Technology 62 (6): 1042–1057.
Bogost, Ian. 2015. "The Cathedral of Computing." Atlantic Monthly, January 15. Accessed May 25, 2015. http://www.theatlantic.com/technology/archive/2015/01/the-cathedral-ofcomputation/384300/.
Campbell-Kelly, Martin. 2009. "Historical reflections: The Rise, Fall, and Resurrection of Software as a Service." Communications of the ACM 52 (5): 28.
Campbell-Kelly, Martin, and Daniel D. Garcia-Swartz. 2011. "From Products to Services: The Software Industry in the Internet Era." Business History Review 81 (4): 735–764.
Chun, Wendy. 2011. Programmed Visions: Software and Memory. Cambridge, MA: MIT Press.
Ensmenger, Nathan. 2014. "When Good Software Goes Bad: The Surprising Durability of an Ephemeral Technology." In MICE (Mistakes, Ignorance, Contingency, and Error) Conference. Munich. Accessed May 23, 2015. http://homes.soic.indiana.edu/nensmeng//files/ensmenger-mice.pdf.
Harper, Richard, Eno Thereska, Siân Lindly, Richard Banks, Phil Gosset, William Odom, Gavin Smith, and Eryn Whitworth. 2011. What Is a File? Microsoft Research Technical Report MSR-TR-2011-109. Redmond, WA.
Hartig, Pascal. 2014. "Building Vim from 1993 Today." SVBTLE. Accessed May 23, 2015. http://passy.svbtle.com/building-vim-from-1993-today.
Helmreich, S. 1998. "Recombination, Rationality, Reductionism and Romantic Reactions: Culture, Computers, and the Genetic Algorithm." Social Studies of Science 28 (1): 39–71.
Hewlett-Packard Invent. 2002. "Success Story." Accessed May 25, 2015. http://h71000.www7.hp.com/openvms/brochures/indiarr/.
Jackson, Steven J. 2014. "Rethinking Repair." In Media Technologies: Essays on Communication, Materiality and Society, edited by Tarleton Gillespie, Pablo J. Boczkowski, and Kirsten A. Foot: 221–239. Cambridge, MA: MIT Press.
Kirschenbaum, Matthew. 2008. Mechanisms: New Media and the Forensic Imagination. Cambridge, MA: MIT Press.
Kittler, Friedrich A. 2006. Gramophone, Film, Typewriter. Stanford, CA: Stanford University Press.
Latour, Bruno. 2013. An Inquiry into Modes of Existence: An Anthropology of the Moderns. Cambridge, MA: Harvard University Press.
Lévénez, Eric. 2015. "Unix History." Accessed May 23, 2015. http://www.levenez.com/unix/.
Manovich, Lev. 2013. Software Takes Command: Extending the Language of New Media. London: Bloomsbury Publishing.
Mens, Tom, and Serge Demeyer. 2008. Software Evolution. New York, NY; London: Springer.
Nato. 1968. "Software Engineering." Report on a conference sponsored by the NATO SCIENCE COMMITTEE. October 7–11, Garmisch. Accessed May 27, 2015. http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF.
Orr, Julian E. 1996. Talking About Machines: An Ethnography of a Modern Job. Ithaca, NY: ILR Press/Cornell University Press.
Richerson, Peter J., and Robert Boyd. 2005. Not by Genes Alone: How Culture Transformed Human Evolution. Chicago, IL: University of Chicago Press.
Richmond, Ben. 2014 "America's Nuclear Arsenal Still Runs Off Floppy Disks." Motherboard (Vice Magazine), April. Accessed May 23, 2015. http://motherboard.vice.com/read/americas-nuclear-arsenal-still-runs-off-floppy-disks.
Riskin, Jessica. 2007. Genesis Redux: Essays in the History and Philosophy of Artificial Life. Chicago, IL: University of Chicago Press.
The Logical Company. 2015. "Home." Accessed May 23, 2015. http://www.logical-co.com/.
Wikipedia contributors. 2015 "Paris Métro Line 14." Wikipedia: The Free Encyclopedia. Last modified May 24, 01:58 CET. Accessed May 25, 2015. http://en.wikipedia.org/wiki/Paris_M%C3%A9tro_Line_14.
Wimsatt, William C., and James R. Griesemer. 2007. "Reproducing Entrenchments to Scaffold Culture: The Central Role of Development in Cultural Evolution." In Integrating Evolution and Development: From Theory to Practice, edited by Roger Sansom and Robert N. Brandon, 227–323. Cambridge, MA: MIT Press.