分享[Martin Github Daily] 我的代码被封存到了北极,1000 年之后会怎样?

Martin老王
19阅读0评论2 个月前

原文:https://github.com/github/archive-program/blob/master/GUIDE_zh.md

GitHub Code Vault 指南

导言

GitHub Code Vault(GitHub 代码保险库)是由 GitHub Archive Program(GitHub 代码永久保存计划)设立的代码档案库,旨在保存开源软件以供未来使用。 一年后或一千年后,您可能会读到这份指南,但无论如何,我们希望其内容甚至每个开源的概念都会对您大有裨益。

首先,这是一个软件档案库。 软件即一系列命令,用于控制计算机操作。 计算机则是可自动执行数学函数的设备,拥有让人脑望尘莫及的迅疾速度及强大能力。 计算机可用于协助探索宇宙奥秘;凭借无所不在的信息网络将全人类紧密相连;快速操控信号以传输声音并将详细的移动图像投射至电气屏幕;同时,以人类劳动力难以逾越的能力和精度操控强大机械。

然而,计算机一旦脱离软件,上述一切功能均无从谈起。 计算机精妙绝伦,但若无软件,则毫无用处。 我们建立本档案库的目的在于,将所知晓的软件知识和盘托出。

软件是由复杂但人类可读的命令序列编写而成,各种不同风格的命令序列即称为“编程语言”,因此一个完整的软件通常可称为一个“程序”。 然后,程序会转换为可供计算机使用的二进制语言(由 0 和 1 构成), 这一过程即称为“编译”。

编译后的软件很难重新破解回原始程序形式,即源代码,因此人们可对该原始形式进行保密,并获得所有权。 开源软件并非不同类别的软件,但却遵循另一种理念。 开源的理念在于拒绝保密和所有权, 开源软件程序面向任何有需求的人士免费开放,反之这些人士可协助改进相关程序,或用其创建更棒的新事物。

数以千计的人员可能自发形成群体,并集全体智慧方可开发出一个开源项目。 正因如此,我们在此累积保存的所有开源软件项目便是由不计其数的人们集思广益而成。 尽管在某些特定项目里,有些个人拥有特殊权利(如对源代码的最新官方版本拥有批准或拒绝更改建议的权利),但是,没有人对其拥有所有权。 每个人都有权随时获取和使用任何开源项目的完整副本,而且无需承担任何代价或遭受任何惩罚。 这个过程即称为“复刻”项目。

当很多人同时对源代码进行编辑时,要对其所有更改进行记录并整合,可谓极具困难。 为了解决这一问题,名为“Git”的开源项目应运而生—— 即针对某个项目,将其所有添加和更改的完整历史记录完美整合至名为 Git 仓库的实体中。 本档案库所存档的正是此等仓库。

本档案库由一家名为“GitHub”的公司创建,该公司面向全球用户提供服务:协助用户存储其所编写的软件程序,持续追踪这些程序的相关更改,以及与他人协作改进和扩展这些程序。 GitHub 面向公共开源软件的开发者提供免费服务, 而该等用户基数高达数千万。

为了充分利用本软件档案库,我们将于以下篇章为您介绍所需知识和必备工具。 如果您无法了解或理解其中的部分或任何内容,请勿惊慌, 我们同时提供一份指南,教您如何消化吸收个中内容。 如基于某些原因,您无法成功掌握这些内容,那么您的子孙后代也可效劳。

使用本档案库所需的必备工具

基本上,仅需一个“光源”和某种“放大镜”,即可访问本档案库。 然而,档案库中的大部分(非全部)数据均通过编码和压缩格式,得以严实封装于胶卷中。 因此,将需大量计算方可读取、解码和解压这些数据。 理论上,无需计算机也能完成此操作,但过程会是非常繁琐且困难重重。

我们推测,您将无需我们就软件、计算机和其它术语提供相应定义。 我们也猜想,你们有自己的计算机。相较我们的机器,你们的计算机可能先进得多,且基础架构截然不同。 一旦了解下方概述和指南,您将可轻易访问所有数据。

当然,你们的计算机可能更为落后,或者说你们根本并未配备计算机。 倘若如此,我们早已备好一个未压缩、未编码但人类可读的数据胶卷,即所谓的“Tech Tree”(技术树)。 Tech Tree 中包含涉及基础科技、计算机和软件的相关信息,希望假以时日,你们将能够使用这些知识重建计算机,以便能够妥善利用本档案库中的开源软件。

库中内容

本档案库非常庞大,拥有高达约 24 万亿字节(详见下方内容),可谓海纳百川,真正实现民主决策。 数百万人苦心编写实用软件并公开发布,人人均可获取。 档案库中包含一张“快照”,记录了某一瞬间,由 GitHub 用户积极开发的所有公共软件组合而成的一张“全家福”。 这代表着,其中强势融合有数以百万计的各个仓库。 我们希望,这样浩瀚博大、科学民主的做法可吸引未来的历史学家前来研究。

本档案库中所包含的仓库纯粹根据其最后一次提交时间(即最后更新时间)及其星数确定。 (GitHub 用户均有权对公共仓库添加星标,以表示其喜爱或重视该仓库。)“快照”的启动时间为 2020/02/02,按我们的计时方式来算,即公历 2020 年 2 月 2 日。 本档案库中包含的仓库包括:前 80 天内有提交更改的所有仓库;前 365 天内有提交更改的所有仓库(至少有一颗星);以及 250 颗星及以上的所有仓库,无需理会其最后更新日期为何时。

当然,就影响力和依赖性而言,并非所有仓库都同等重要。 Tech Tree 中含有一份索引及简介,其中涵盖本档案库中最重要的仓库,并列出其所在的各个胶卷,以便确定那些最为实用的仓库,而无需逐一浏览全部几百万个仓库。

档案库概述

本档案库共含有 201 个胶卷,其中包括一个含有人类可读信息和指引的“指南胶卷”和 200 个软件存档胶卷。 每个胶卷包含 65,000 个单独的帧。 每个胶卷开头的帧及“指南胶卷”内的帧均包含人类可读文本和图像。 胶卷的所有其它帧则含有以二维码可视形式存储的数字数据。

数字数据意味着以二进制作为最终存储格式的数据,即 0 和 1。原因在于,计算机本身就是二进制,即通过分别对应 1 或 0 的“开”或“关”电信号进行控制。因此,相比其他方式,二进制数据更易于计算机识别。

人类可读元数据存储于每个胶卷的开头,包含该胶卷本身的信息、所用二维码编码指南、用于解码的软件程序及一份索引。 其中,该索引针对存储在该胶卷上的每个文件,均列出其相应标题、起始帧号和检验和。

文件是连贯一致的数据实体。 校验和是计算中的唯一值(称为哈希函数),运行于文件的整体内容上,以确保其内容未受到损坏或破坏;本档案库中使用的哈希函数称为"SHA-1"。

每个二维码由一个个白色或黑色小方块组成,该等小方块几乎占据胶片的整个帧。 使用二维码的原因在于,其比人类可读的文本更紧凑而可靠。 二维码可解码为二进制数据,即一系列 1 和 0。

就将二进制数据转换为有意义的信息而言,解码仅是第一步。 二进制数据是压缩数据,即通过压缩的方式来节省空间。其中的原理就如我们会写“128xA”,而不会将字母 A 重复写 128 遍一样。 解码后,其还须进行解压。

解压后的结果称为一个“存档文件”,即包含一个软件项目仓库全部内容的单个文件。 大部分仓库会包括许多文件,因此该存档文件就像是一本书,其内包含众多不同章节;或像是一个盒子,其内同样包含许多其它盒子。 通常建议在访问存档文件之前,将其解包到组件文件中,但该做法并非绝对必要。

最后,每个组件文件均为其各自的二进制数据集,即 1 和 0。 若您知道数据格式,即可理解该数据。 例如,在本档案库最常见的“UTF-8”格式中,1 和 0 被分成八位一组,称为“字节”,字节 01000001 代表字母 A;三个字节 01101001 01101110 01110100 即代表单词 int;两个字节 11000011 10000011 则代表字母 Ã(上面带有波浪号的 A)。

此数据存档过程——将二进制文件先压缩,再编制二维码,最后打包成存档文件——显然会比简单书写人类可读的文本要复杂得多。 提取档案的过程,即从二维码到压缩的二进制数据;从压缩到解压;从存档文件到多个文件;从文本文件到人类可读文本,也同样复杂。 然而,此复杂过程相比其它方式,可以计算机可读的相对简单方式存储更多数据。

若因为如此复杂而给您造成困难和导致高成本,我们深表歉意。但我们猜测,若真如此,本指南及人类可读的 Tech Tree 将会降低复杂性,而且可能比存档内容更实用,至少当计算机足够先进时,本档案库的数据复杂性会显得易于操作。

更多内容请查看原文哟。

https://github.com/github/archive-program/blob/master/GUIDE_zh.md

寻找 Martin

分享主题:
经历/经验
城市:
海外
加载中…
精选评论
暂无数据

暂无数据