关闭

2019年7月20日

存档和引用Apollo源代码

阿波罗制导计算机及其DSKY

那是五十年前的1969年7月20日。全世界有6亿人屏住呼吸,在电视上观看第一艘载人飞船登陆月球的模糊黑白图像:我就是其中之一,我永远不会忘记我们所有人感受到的巨大情感。

软件是阿波罗任务的支柱…

当时,很少有人知道,在这一里程碑式的成就中,软件发挥了关键作用,该软件运行在阿波罗制导计算机(也称为AGC)上,由麻省理工学院的一个伟大团队开发,该团队由玛格丽特·汉密尔顿(Margaret Hamilton)领导。然而,就在着陆前几分钟,几个程序警报1201和1202表示计算机过载如果系统没有妥善处理,这可能会危及整个任务。我们现在可以读取Don Eyles对这些事件的惊人描述,编写代码的工程师之一,发布了一个最近出版的书,也是美丽的砍掉月亮网站。

…我们可以完全访问它

今天,由于

Margaret Hamilton和AGC源代码

Margaret Hamilton站在AGC源代码旁边

由于AGC是用汇编语言编程的,而汇编语言远非人类可读的,源代码中充满了详细的注释,让我们完全沉浸在20世纪60年代的开发人员文化中,看到有多少人开始钻研它,真是太棒了。

长期存档和引用具有里程碑意义的源代码

在Software Heritage,我们很高兴能够通过以下方式为这项工作做出贡献归档对于长期AGC的软件源代码,并通过提供引用特定代码片段的方法,使用持久内在标识符(另请参见描述它们的全文)也称为SWH-ID软件第条。

下面是一些我特别喜欢的AGC源代码片段,以及它们的持久内在标识符。尝试单击这些片段中的文本:您将被带到Software Heritage存档,并在上下文中看到它们。

燃烧,宝贝,燃烧!

在登月舱的程序中,有一个例程调用伯恩巴比负责五个不同LEM项目的主推进器的通电和断电。每个程序都是作为对伯恩巴比带有指向参数表的指针。
下面是评论中的一个很好的片段,其中包含SWH-ID软件


这里是带有上下文的完整标识符(存储库和代码行):swh:1:cnt:665f8e95921e92776819b719f780ddbece2b78ac;线路=62-81;https://github.com/virtualagc/virtualargc/

#主点火程序设计用于以下LEM程序:P12、P40、P42、P61、P63。#它执行与APS或DPS点火直接相关的所有功能:尤其是所有谎言#在点火前时间检查之间——我们是否在TIG的45秒内?——和TIG+26秒,当DPS#程序加速。##程序之间的变化通过包含常数的表格进行调节(对于平均出口,对于#PINBALL)和TCF说明。用户放置适当表格标题的地址#(例如P61LM的P61TABLE)在可擦除寄存器'whit'(E4)中。点火程序然后索引#获取或执行适当的表条目。点火程序由TCF燃烧室启动,#必要时通过跳台。没有回报。##主点火程序是由ADLER和EYLES构思和执行的,(NOTA BENE)是由ADLE和EYLE维护的。##HONI SOIT QUIMAL Y PENSE公司## ****************************************#点火程序表# ****************************************##诺利SE TANGERE

在这里honi soit quimal y pense公司似乎暗示着,编程AGC的惊人壮举当时还没有得到充分认可,我想在这里补充一点,我们还有很长的路要走,才能看到在学术生涯中考虑到优秀的研究软件。
然后,作者甚至使用拉丁文强调参数表的关键性(«noli se tanger»表示«do not touch»)。
顺便说一句,这就是为什么这个程序被称为BURNBABY.

愚蠢的事和巫师

在登月阶段,AGC要求宇航员转动LEM(“愚蠢的东西”),以便可以初始化登月雷达。为了安全起见,程序员添加了一个双重检查,在验证位置的例程开始时跳回来(即«查看他是否在下面的代码中撒谎»),然后当然,我们去查看向导…伯恩巴比.

极客注意:如果您想了解调用约定,以及下面对应于TERMINATE和PROCEED的两个不同的返回地址,您应该看看在这里.

CAF代码500#宇航员:请启动TC BANKCALL#周围的傻事CADR GOPERF1公司TCF GOTOPOOH#终止TCF P63SPOT3#继续查看他是否在撒谎P63SPOT4 TC BANKCALL#ENTER初始化着陆雷达CADR集合1TC POSTJUMP#OFF观看向导。。。CADR伯恩巴比

软件遗产:软件源代码的特殊场所

能够在博客帖子、文章、推文或文档中准确地指出这样的代码片段,真是太棒了,事实上还有很多协同软件开发平台提供此功能。但开发平台不是档案:有时它们会消失,比如Gitorious、Google Code或CodePlex,而且它们存储的代码通常会被更改或移动:这可能会导致链路损坏如果你用它们来写这样的博客文章。事实上,这就是伟大的2016年Quartz文章,它与GitHub的许多链接现在都死了(参见示例在这里在这里在这里).

使软件遗产真正特别并使其与其他平台区别开来的是设计正是为了避免这一切:

  • 它是一个档案文件:这意味着你现在在里面找到的一切都会
    明天仍然在那里,你描述一个里程碑式的软件的工作在几年内仍将相关;
  • 它提供内在持久标识符:这意味着您可以引用代码片段独立地代码最初所在的平台以及使用的版本控制系统。

我们很高兴能够长期支持和维护热情的人们在深入研究里程碑式软件源代码、探索其内容和分享他们的发现方面所做的努力。

有兴趣潜水吗?这块地是你的!

罗贝多·迪·科斯莫,软件遗产总监

 

2019年7月20日