开源 GitHub 登月

登月源码开源GitHub No.1!又被中国程序员“玩坏”了

2019-07-22
231次浏览

来自芯闻天下.png


这几天适逢人类登月50周年,1969年的今天美国阿波罗11号飞船成功在月球着陆,正如首个登月的宇航员阿姆斯特朗所说——这是个人的一小步,但是人类的一大步。面对阿波罗11号登月50周年这个大热点,不少公司、组织、个人也从多个角度来纪念这一伟大的日子,NVIDIA发布了一段使用光线追踪技术渲染的登月Demo,不仅效果出色,还从光线渲染的角度证明了登月不是骗局。


1969 年 7 月 20 日,“阿波罗 11 号”飞船登月,宇航员尼尔·阿姆斯特朗(Neil Armstrong)成功踏上月球表面,标志着人类第一次踏上月球,完成重要的一步:“这对个人来说是一小步,对人类来说却是一大步。


2019 年 7 月 20 日的今天,正是人类登月 50 周年。


这两天,Apollo-11的源码项目一直占据 GitHub 热榜第一,目前已获得 37,000+ 个Star。


图片.png


其实 Apollo-11 并非是冲着在这 50 周年才开源,早在 2014 年便有第一次的代码 commit,并在 2016 年开源。目前已累计超过 300 次commit,有近5000 个 Fork。??

?

图片.png


这些代码是阿波罗11号制导计算机(AGC)中指令模块(Comanche055)和登月模块(Luminary099)原始代码,这个项目的目的是存储阿波罗 11 号原始代码。


图片.png


此外,虚拟AGC和麻省理工科学博物馆将阿波罗导航计算机(AGC)中的指令模块Comanche055、登月模块Luminary099的原始代码公布在了GitHub上,任何人均可自由查阅、编译。


考虑到阿波罗工程的庞大及复杂,阿波罗11号的源代码开源更多地是象征意义,其他人或者组织也不可能根据这个源码搞自己的登月飞船。


也许正是因为这样,阿波罗11号开源之后很快就有了许多issue(可以看做对源码的提问或者评论,虽然本质上不是这个作用),而且中文占了绝大多数,中文程序员们把阿波利11号源码issue当作了一个评论区。


这些评论大多不是恶意的,主要是调侃、跟风、吐槽、灌水,但总的来说这些评论更多地是国内微博、贴吧的风格,完全看不出与阿波罗11号源码有什么关系。


Github作为全球最主要的代码托管平台,一直被程序员自嘲为最大同性交友社区,如今里面不严肃不正经的东西越来越多,这也是很多人对Github不满的地方。


前两天还有国外的程序员发文表示Github上有太多中文项目,GitHub Trending几乎被被思中国人霸榜了,这些项目有的连注释都是中文的,国外程序员大部分看不懂,所以这事导致一些国外程序员很无奈。


当然,这位小哥的文章态度OK,不是为了喷中文程序员,而是提出了Github上的一个管理问题,确实值得官方思考和改进。


图片.png

图片.png


除了代码还有笑料和吐槽


上世纪60年代中期,麻省理工学院(MIT)仪器实验室的程序员们为阿波罗11号登月计划开发飞行控制软件,由于当时还没有开发软件所需要的技术积累,所以他们必须自己打造一套体系出来。


他们提出了一种存储计算机程序的新方法,名为“线存储器”,并创造了一种特殊版本的汇编语言。对于现今的很多程序员来说,汇编语言晦涩难懂,其目的是方便计算机理解,而不是便于人类理解。MIT的程序员们为阿波罗制导计算机(AGC)编写了成千上万行的那种深奥代码。


从下图中,可以直观地感受到他们到底写了多少代码。图为阿波罗登月计划软件工程主管玛格丽特·汉密尔顿(Margaret Hamilton),她旁边是一大堆的AGC代码文件。


图片.png


AGC代码其实早已公之于众,最初是由技术研究员罗恩·伯基(Ron Burkey)在2003年上传到网络。他根据MIT在网上发布的原始硬拷贝的扫描件进行了转录,也就是一行一行地手动打出来。


“扫描的人是一名叫做加里·内夫(Gary Neff)的飞行员,”伯基在电子邮件中写道,“MIT得到了扫描件,把它们以网页图片的形式放上网。但不幸的是,在此过程中,那些图片遭到损坏,有些地方无法看清。”伯基利用其工程知识查漏补缺,恢复了无法看清的部分。


“一段时间过后,我从加里·内夫那里拿到了备用扫描件,对无法看清的部分进行了核实,幸运地发现我恢复的部分完全正确!”他说。


这使那些想要探究AGC代码的研究员和爱好者如获至宝。伯基本人甚至利用AGC代码创造了一个模仿品。


尽管伯基付出了巨大的努力,成功地重现了无法看清的部分,但对于当今的很多软件开发者来说,AGC代码本身仍然有点晦涩难懂,直到7月7日那天,曾在NASA实习的克里斯·加里(Chris Garry)将AGC代码完整地上传到代码共享网站GitHub。如今,光顾该网站的程序员数不胜数。


几小时内,程序员们开始研究AGC代码,尤其是AGC原始编程者撰写的代码注释。代码注释是用简单直白的语言描述某个特定时刻执行的任务。Reddit网站程序员吐槽栏目的读者们在找乐子方面一向敏锐,他们发现AGC代码的很多注释并不是对代码本身的枯燥解释,其中充满了有趣的笑料和讯息,以及上世纪60年代的很多人和事。


例如,一份源代码文件名为“BURN_BABY_BURN--MASTER_IGNITION_ROUTINE”(燃烧吧,宝贝,燃烧吧——控制点火程序),开头的注释(下图)这样写到:“燃烧吧,宝贝,燃烧吧”可追溯到1965年的洛杉矶骚乱,当时著名DJ、电台所有者“伟大的蒙塔古”(Magnificent Montague)在打碟时使用了这句话。伟大的蒙塔古是上世纪50年代中期至60年代中期,在芝加哥、纽约和洛杉矶极富感召力的灵歌代表人物。


图片.png


以下这段代码也出自控制点火程序,第一行写着“你好啊”,最后一行写着“拜拜,欢迎再来哦”。从中可以体会到AGC原始编程团队有多爱玩。


图片.png


在名为“LUNAR_LANDING_GUIDANCE_EQUATIONS.s”(月球着陆制导等式)的文件中,程序员希望其中的两行代码是暂时的,结果却成了永久的。


图片.png


也是在那份文件中,出现了让宇航员“转动那个蠢东西”的注释。


图片.png


“那是指转动着陆雷达的天线,”伯基解释说,“我觉得那是在提醒宇航员调整天线。”


在被描述为“AGC和计算机操作员之间的键盘和显示系统交互程序”的“PINBALL_GAME_BUTTONS_AND_LIGHTS.s”(弹珠游戏按钮和显示)文件中,甚至出现了莎士比亚名著《亨利六世》中的一段话:“我要径直向你指出,你任用了许多人,让他们大谈什么名词呀,什么动词呀,以及这一类的可恶字眼儿,这都是任何基督徒的耳朵所不能忍受的。”


图片.png


Reddit网站的一位用户指出,这可能是在吐槽AGC的编程语言。这种编程语言利用预先确定的“名词”和“动词”来执行操作。例如,动词37代表“运行程序”,名词33代表“点火时间”。


既然AGC代码已经在GitHub网站上公布,程序员们现在能够提出问题和修改建议了。他们当然不会错过机会。一位程序员提出了一个问题,说“低温贮罐发生了非常严重的电路故障”,并列出了再现这个问题的步骤。他补充道,“要小心,这可能对测试者造成危险。”回复非常热烈。


一位用户说,问题可能不在于代码,而在于其他方面:


“是不是只发生在月球转移轨道(sol-3-a)上?还是在所有的月球轨道上都会发生?问题可能出在月球。试着缩小问题的范围。”


另一位用户谈到了基本操作:


“你有没有试过关闭后重启?”


一位程序员认为可能只是软件需要更新:


“阿波罗14号解决了这个问题。”


不重要的登月代码才开源?


可能会有人认为,能开源的登月代码应该不算是重要的代码。实际上并不是的。那么 AGC 究竟是什么?


阿波罗制导计算机(AGC)于上世纪 60 年代由美国国家航空航天局(NASA )开发,主要用来控制阿波罗宇宙飞船上的导航与制导系统。


阿波罗号太空船实际上是两种不同的航天器,分为指挥舱(CM)和登月舱(LM)。指挥舱是用来让三名宇航员登上月球,然后再接回来。登月舱是用于承载两名在月球行走的宇航员,而第三名宇航员则留在指挥舱中,绕月球轨道运行。


所以说在人类第一次登月的三位宇航员里,只有前两位宇航员阿姆斯特朗和巴兹·奥尔德林(Buzz Aldrin) 真正地在月球行走,第三位迈克尔·科林斯(Michael Collins)则是坐在飞船里执行任务。


无论是否有宇航员的协助,每个航天器都需要能够在太空中航行,因此需要有一个“制导系统”。该指导系统由麻省理工学院的仪器实验室开发,这个制导系统的一个重要部分是阿波罗制导计算机——“AGC”。


在阿波罗任务中,有两个 AGC,一个用于指导舱,一个用于登月舱。这两个AGC 是相同且可互换的,但它们运行不同的软件,因为航天器执行的任务是不同的。

此外,由 AGC 运行的软件随着时间的推移而发展,所以在后来的任务中使用的AGC 软件(如 Apollo 17)与早期的任务(如 Apollo 8)略有不同。


所以说,这份源码还是很重要的。


在该项目里,还列出当时参与编写这些代码的程序员:??


图片.png


正因为有了这些程序员,我们才完成在科学上重要的“一大步”!


惊心动魄的登月时刻,这位女程序员拯救了所有!


阿波罗 11 号登月的过程并不如阿姆斯特朗登月时那“轻松”的一步,而是惊险万分!如果没有这位女程序员,可能就阿波罗就无法成功登月了。


她就是玛格丽特·希菲尔德·汉密尔顿(Margaret Heafield Hamilton),在美国媒体 IT World 评选“在世的世界上最伟大程序员”中,玛格丽特排名第一。

一开始为了贴补家用,玛格丽特成为实验室临时编码员,后因工作出色,被推荐去了 NASA。


当时她带领团队为阿波罗登月计划做后备方案,由于大家是奔着成功去的,所以她负责是最不受重视的部分:万一任务失败之后的后备方案。


但玛格丽特依然认真地用模拟器模拟飞行状态,检查系统漏洞。


可没想到阿波罗 11 号飞船准备正式登陆月球前几分钟,雷达发来的大量的数据涌入计算机存储区,让系统近乎崩溃,飞船将在月球坠毁,宇航员已做好牺牲的准备。


幸好有玛格丽特编写的后背方案软件抗住了压力:在大量错误数据突然涌入,计算机不堪重负是因为进行了一系列不必要的计算,事实上最重要的资源应该用在安全登录上,其他不重要的任务将终止。


这就是她后来提出的“异步处理”概念。


正因为有了这样优秀严谨的程序员,人类才能完成第一次登月。后为了表彰她在登月计划中的贡献,奥巴马授予她“自由奖章”。



-END-

我要点评