1.概述
1.1什么是软件遗产(SWH)?
软件遗产是Inria于2016年推出的一项公开的非盈利倡议。该倡议得到了机构和行业合作伙伴的广泛支持,并与联合国教科文组织合作。
展开以获取详细信息
长期目标是收集所有公开可用的源代码形式的软件及其开发历史,大规模复制以确保其保存,并与所有需要它的人共享。
有关SWH的更多信息使命.
1.2 SWH档案是什么?
SWH存档是现有最大的源代码公共集合。访问上的存档https://archive.softwareheritage.org.
1.3档案的大小是多少?
随着我们从软件项目和开发伪造品中获取新的源代码,存档正在不断增长。您可以在上看到存档内容的实时计数器,以及按爬网来源的细分https://archive.softwareheritage.org.
1.4 SWH提供哪些服务?
Software Heritage是一个相互关联的平台,为广大用户提供越来越多的服务。
这个特征页面提供了当前可用功能的概述。例如,这包括归档软件存储库、浏览归档的源代码和提供持久标识。
2.归档软件
2.1哪些软件平台(伪造、包管理器等)被存档?
当前定期存档的软件源列在主存档页面.
展开以获取详细信息
以下是此列表的摘录:
- 来自多个伪造的git存储库(github、bitbucket、gitlab实例、cgit实例、gitea实例、phabricator实例等)
- svn存储库…
- 汞存储库…
- apt中的Debian包
- PyPI中的Python包
- CRAN中的R包
- NPM.org中的NPM包
- 在gnu.org中压缩或存档tarball
2.2如果我的代码在GitHub/GitLab/Bitbucket上,它是否已经在SWH中存档?
可能是这样,因为我们经常抓取这些和其他流行的伪造品。在上搜索代码存储库https://archive.softwareheritage.org/browse/search网站/.
展开以获取详细信息
如果它还不存在,或者如果最新的快照不是存储库的最新状态,则可以使用“立即保存代码”功能触发新的存档https://archive.softwareheritage.org/save/或单击浏览视图中的“再次保存”按钮。
![](https://hedgedoc.softwareheritage.org/uploads/upload_f927d52a90509ceae1f6bd595ace41a2.png)
2.3如果我删除包含我的代码的存储库,数据会留在SWH中吗?
是的,所有软件源代码工件都会长期保存。
2.4确定哪些内容应归档的政策是什么?SWH是否需要存档GitHub、Gitlab或XXX存储库?
我们不检查或过滤源代码,也不存档任何我们能得到的东西。因此,这里没有要求,但我们确实建议遵循SWH指南以获得最佳效果。
展开以获取详细信息
之所以采用这种方法,是因为无法提前知道软件源代码的价值。当项目开始时,人们无法预测它是否会成为关键的软件组件。例如,当拉斯穆斯·勒多夫已释放PHP的第一个版本早在1995年他本可以预测它将成为最受欢迎的网络工具之一。
XKCD漫画https://xkcd.com/2347/(抄送,抄送2.5)
而且这种情况也会发生几十年来,非常宝贵的源代码可能会被忽视,直到有一天一些意想不到的错误揭示了我们的数字基础设施很大一部分依赖于它们.
2.5在存档之前,代码是否检查了许可证文件或存储库中的任何特定特征?
Software Heritage将所有公开可用的内容归档,无需进行初步测试或检查。
这意味着您有责任检查您在存档中找到的源代码是否可以重用,以及在哪些条件下可以重用。
对于您生成的代码,我们建议遵循标准最佳实践,这些实践在SWH指南,这包括添加许可信息。
2.6您是否也存档软件可执行文件(也称为二进制文件)?
我们的核心任务是保存源代码,因为它是人类可读的,并且包含在可执行文件中剥离出来的宝贵信息。因此,我们不会主动存档二进制文件,但如果二进制文件包含在软件存储库中,我们不会在存档过程中将其过滤掉。因此,您可以在存档中找到一些二进制文件。
2.7我在Software Heritage的git存储库中找不到我所有的“版本”,我该怎么办?
不用担心,您的存储库已完全保存。您所看到的只是像GitHub这样的平台所称的“releases”(任何未注释的git标记)和我们所称的(Merkle树中的节点,对应于git注释的标记)之间的术语差异。这是一个常见问题,如您在此讨论线索.
展开以获取详细信息
假设您标记了您的发布,并将其命名为“FinalSubmission”,但您没有使用带注释的标记:在这种情况下,它不会显示在Software Heritage的“发布”选项卡中,但它仍然存在!单击Software Heritage Web界面上的分支下拉菜单,您会发现它列为“refs/tags/FinalSubmission”。如果您希望发布出现在我们的web界面中,您应该使用“git tag-a”创建标记,而不是简单地使用“git-tag”,或者直接在代码托管平台上创建发布,该平台在幕后使用正确的“git标记-a”,然后再次归档存储库。
3.引用和标识
3.1什么是SWHID(软件遗产标识符)?
这个斯威德(Software Heritage Identifier)是一个持久的内在标识符,它是从软件工件本身唯一计算出来的。请参阅专门的博客帖子,以了解有关内部和外部标识符的更多信息.
展开以获取详细信息
有关语法、语义、互操作性和实现的所有详细信息,请参阅正式规范.
下图简明扼要地显示了SWHID的关键组件:
学分:2019年软件遗产
图中顶部的黄色框对应于“堆芯SWHID“。可以添加限定符以提供关于对象在软件遗产图中的位置或其起源的附加信息,并识别代码片段。
3.2SWHID可以识别什么?
首先,让我们注意到,可以在不同的粒度级别上识别软件,从概念级别(例如软件项目的名称)到具体的软件工件(例如包含大量文件的目录)。
信贷:研究数据联盟/FORCE11软件源代码识别工作组,2020年,https://doi.org/10.15497/RDA00053
Software Heritage标识符旨在永久和内在地标识与具体软件工件相对应的所有粒度级别:快照、发布、提交、目录、文件和代码片段。
展开以获取详细信息
核心SWHID可用于识别以下源代码工件:
使用“线“限定符,也可以标识”代码片段”,即选定的代码行。
例如,swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2;线=4-6精确定位GPL3许可证全文的第4行到第6行。
更一般地说,使用完全合格的SWHID可以提供在上下文中放置软件工件的所有相关信息。例如,以下SWHID精确定位了文件中包含的核心映射算法parmap.ml(零件图.ml),位于型钢混凝土从检索到的Parmap项目特定修订版的目录https://github.com/rdicomoso/parmap
swh:1:cnt:3b997e8ef2e38d5b31fb353214a54686e72f0870;原产地=https://github.com/rdicomoso/parmap;visit=swh:1:snp:25490d451af24142b2a08ece0df643df2800084;锚=swh:1:修订:db44dc9cf7a6af7b56d8ebda8c75be3375c89282;路径=/src/parmap.ml;线路=192-237
3.3如何为我的软件获取SWHID?
核心SWHID标识符是内在的,所以可以在机器上本地计算任何软件工件的核心SWHI!你可以找到说明在此处可用的文档中!
您还可以直接从软件遗产归档:使用名为“永久链接”的红色垂直选项卡,显示在显示源代码的每个页面上(请参阅有关更多详细信息,请访问HOWTO). 第二种方法的优点是,您可以获得带有相关上下文信息的SWHID(例如,您的工件在软件开发的全局图形中的位置)。
展开以获取详细信息
“永久链接”选项卡允许您为正在浏览的内容获取SWHID。下面是一个示例:
![](https://hedgedoc.softwareheritage.org/uploads/upload_65a5c9bb46ff1a3b996c50a5d801b49f.png)
点击“复制标识符”可以在剪贴板中获得SWHID。点击“复制永久链接”,您可以在剪贴板中获得相应的URL。
“添加上下文信息”复选框允许您选择是获得核心SWHID还是带有提供上下文信息的额外限定符的SWHID。
请注意,Permalinks选项卡提供了多个选择SWHID的选项(您可以获得文件内容、包含该文件的目录、修订版、版本或快照的选项)。请参阅以下问题以了解哪一个最适合您的用例。
![](https://annex.softwareheritage.org/public/tutorials/getswhid_snippet.gif)
3.4我应该在文章/文档中使用哪种类型的SWHID?
这确实取决于您的用例,但作为一般建议,我们建议采取目录的完整SWHID(包含上下文信息).
展开以获取详细信息
在撰写研究文章、博客文章或技术文档时,人们可能会面临需要提供最大数量的信息、使用完整的SWHID或保持引用简短(例如由于页面限制)之间的紧张关系。
以下是解决此问题的建议最佳实践:
- 获取包含要引用的代码版本的“目录”的完整SWHID。下面是这样一个完整SWHID的示例:
swh:1:目录:013573086777370b558b1a9ecb6d0dca9bb8ea18;原产地=https://gitlab.com/lemta-rheosol/craft-virtual-dma;visit=swh:1:snp:ef1a939275f05b667e189afbeed5fd59cca51c9d;锚=swh:1:修订:ad74f6a7f73c7906f9b36ee28dd006231f442552e
- 确保“核心SWHID”(
swh:1:目录:013573086777370b558b1a9ecb6d0dca9bb8ea18
在上面的示例中),并且完整的SWHID至少可以作为超链接使用。
在LaTeX中可以实现以下效果:
\href公司{https://archive.softwareheritage.org/swh:1:dir:013573086777370b558b1a9ecb6d0dca9bb8ea18;起源=https://gitlab.com/lemta-rheosol/craft-virtual-dma;visit=swh:1:snp:ef1a939275f05b667e189afbeed5fd59cca51c9d;锚=swh:1:版本:ad74f6a7f73c7906f9b36ee28dd006231f42552e/}{swh:1:目录:013573086777370b558b1a9ecb6d0dca9bb8ea18}
或在降价中:
[swh:1:目录:013573086777370b558b1a9ecb6d0dca9bb8ea18](https://archive.softwareheritage.org/swh:1:dir:013573086777370b558b1a9ecb6d0dca9bb8ea18;原产地=https://gitlab.com/lemta-rheosol/craft-virtual-dma;visit=swh:1:snp:ef1a939275f05b667e189afbeed5fd59cca51c9d;锚=swh:1:版本:ad74f6a7f73c7906f9b36ee28dd006231f42552e/)
这种方法确保在任何情况下印刷的版本,读者会发现对再现性最有用的标识符:目录的核心SWHID。的确,可以从源代码的任何实例本地计算目录的核心SWHID独立于在特定项目中包含它的发布或提交。
在数字版本中可点击的链接使用完整的SWHID让读者通过所有适当的上下文(版本、来源等)浏览Software Heritage中的代码。
3.5我想要一个源代码的完整SWHID,这个源代码还没有存档。我该如何继续?要多长时间?
如果您的代码(或其最新版本)尚未存档,则需要首先触发其存档。可以使用“立即保存代码”请求,或通过存款API。
发出“立即保存代码”请求后,根据存储库的大小,代码的接收通常在几分钟内完成。完成后,保存请求的状态将更新,您可以获得SWHID,如前所示。
提交存款时,摄取通常也会在几分钟内完成,并且可以通过SWORD状态响应访问SWHID。
4.访问和重用
4.1我可以重用我在SWH上找到的源代码工件吗?
它取决于工件的许可证,与源代码一起存储:您必须在下载或重用之前检查此许可证。如果您找不到许可证信息,则应假定您无权重用它。
展开以获取详细信息
存档中的所有软件组件可能受版权或其他权利(如专利或商标)的保护。Software Heritage可以提供适用于给定软件组件的软件许可证的自动衍生信息,但它不主张正确性,并且提供的许可证信息不构成法律建议。您全权负责确定适用于存档中任何软件组件的许可证或其他权利,并且必须遵守其条款。
4.2我可以使用SWH克隆存储库吗?
请不要直接从SWH克隆完整的存储库:它是一个存档,而不是伪造品。请首先尝试从开发存储库的地方克隆存储库:这样会更快,而且作为额外的好处,您将已经处于与开发人员交互的正确位置。
展开以获取详细信息
SWH将所有软件工件存储在一个大规模共享中Merkle树,因此导出存档存储库(的特定版本)意味着遍历图形以获取所有相关内容并将其打包以供您使用。此操作比下载现有tar文件或从伪造中克隆存储库要昂贵得多。
如果SWH是您最后的选择,并且您在其他地方找不到感兴趣的源代码,我们建议您只下载感兴趣的版本,使用“目录“浏览存档时找到的下载按钮的选项。
如果绝对需要,您可以使用更昂贵的“修订”选项,它将为您准备相当于git裸克隆
,您可以脱机使用。这可能需要相当长的时间(对于大型存储库,可能需要数小时甚至数天)。
4.3我可以通过API检索源代码工件吗?
是的,你可以。如果您手头有SWHID,那么可以使用适当的API方法在端点之间导航,以遵循项目工件的图形。查看完整的API文档端点列表.
展开以获取详细信息
您还可以查找来源并跟踪其访问:
如果您有兴趣下载存储库的大部分内容(一个目录或一组修订),应该使用名为保险库. The拱顶允许您批量获取它们并下载tarball。vault端点列表位于所有API端点的列表
5.软件元数据
5.1我可以向我的软件中添加元数据吗?
普通用户可以在存储库中添加元数据文件,当使用特定的文件格式(codemeta.json、package.json、pom.xml等)时,这些文件将被接收和索引。
展开以获取详细信息
遵循SWH指南如何准备代码存档。
有关被索引的格式的更多信息,以及关于软件元数据的挖掘
5.2现在保存代码时,从代码存储库中保存了哪些元数据?
源代码存储库本身包含的所有元数据都将被保留。这将包括开发历史、提交日期和消息。目前,在使用“立即保存代码”功能时,不属于存储库的其他元数据工件(称为外部元数据)不会被保留。
5.3存放的软件工件保存了哪些元数据?
通过软件工件附带的SWORD协议发送的所有元数据。有关更多信息,请访问存款凭证.
5.4 codemeta.json文件是什么,我为什么要使用它?
作为软件开发人员,我们可能希望为我们的项目提供一个机器可读的描述,但用于描述软件的元数据模式(太多)很容易丢失。
这个CodeMeta倡议创建了一个通用词汇表来解决这个问题,基于软件应用程序和软件源代码成熟的阶层schema.org网站主动性,并提供了从其他medatada模式来回转换的工具。
这个代码元.json文件是CodeMeta词汇表的JSON-LD表示,可以使用开源轻松创建和验证代码元生成器工具通过向项目中添加codemeta.json文件,可以轻松共享元数据信息,并减少在数据输入表单中重新键入大量信息的负担。
展开以获取详细信息
例如,法国HAL国家开放存取档案馆在存放software Heritage中存档的软件项目时,会查找codemeta.json文件,并使用其中包含的信息预先填写存放表单,这是一种实时节省!
最后但并非最不重要,软件遗产索引codemeta.json文件中包含的元数据,并使其可以使用codemeta人行横道表在web-app上进行搜索。人行横道表是软件元数据的罗塞塔石碑,有助于软件本体和元数据标准之间的转换。
图片来源:Gruenpeter M.和Thornton K.(2018)自由软件发现之路(LibrePlanet 2018的幻灯片)。https://en.wikipedia.org/wiki/文件:路径-免费探索.pdf
5.5 Software Heritage是否对元数据进行检查(例如,验证是否声明了许可证)?
简而言之,答案是否定的。Software Heritage不会对存档的存储库执行任何预先筛选。