关闭

常见问题解答

1.概述

1.1什么是软件遗产(SWH)?

软件遗产是Inria于2016年推出的一项开放的非盈利计划。它得到了广泛的机构和工业伙伴小组的支持,并与教科文组织合作。

展开查看详细信息

 

长期目标是以源代码的形式收集所有公开可用的软件及其开发历史,大规模复制以确保其保存,并与所有需要它的人共享。

有关SWH的更多信息使命.

1.2什么是SWH档案?

SWH存档是现存最大的源代码公共集合。访问档案https://archive.softwareeheritage.org.

1.3档案的大小是多少?

随着时间的推移,我们从软件项目和开发伪造品中获取新的源代码,归档文件也在不断增长。您可以在上看到存档内容的实时计数器,以及按爬网来源划分的细分https://archive.softwareeheritage.org.

1.4 SWH提供哪些服务?

软件遗产是一个相互化的平台,为广大用户提供越来越多的服务。

这个特征页面提供了当前可用功能的概述。例如,这包括归档软件存储库、浏览归档的源代码和提供持久的标识。

2.归档软件

2.1哪些软件平台(forges、包管理器等)被归档?

当前定期存档的软件来源列在主存档页.

展开查看详细信息

 

以下是这份名单的摘录:

  • 来自多个forge的git存储库(github、bitbucket、gitlab实例、cgit实例、gitea实例、phabricator实例等)
  • svn存储库…
  • mercurial存储库…
  • apt中的Debian包
  • PyPI中的Python包
  • R CRAN包装
  • NPM中的NPM包。组织
  • 压缩或归档gnu中的tarballs。组织

2.2如果我的代码在GitHub/GitLab/Bitbucket上,是否已经在SWH中存档?

可能是的,因为我们经常抓取这些和其他流行的伪造品。
在上搜索代码存储库https://archive.softwareeheritage.org/browse/search/.

展开查看详细信息

 

如果还没有,或者最新快照不是存储库的最新状态,则可以使用“立即保存代码”功能触发新的存档
https://archive.softwareeheritage.org/save/或者单击浏览视图中的“再次保存”按钮。

2.3如果删除包含代码的存储库,数据会保留在SWH中吗?

是的,所有的软件源代码工件都是长期保存的。

2.4确定哪些内容应归档的政策是什么?SWH是否要求GitHub、Gitlab或XXX存储库存档?

我们不检查或过滤源代码,也不存档任何我们能得到的东西。因此,这里没有要求,但我们建议遵循SWH指南为了达到最佳效果。

展开查看详细信息

 

这种方法的原因是软件源代码的价值无法预先知道。当一个项目开始时,人们无法预测它是否会成为一个关键的软件组件。例如,当莱多夫释放早在1995年,PHP上的第一个版本,谁能预料到它将成为网络上最流行的工具之一。

XKCD漫画https://xkcd.com/2347/(CC BY-NC 2.5)

也有这种情况发生非常珍贵的源代码片段可能会被忽视几十年,直到有一天一些意想不到的缺陷揭示了我们的数字基础设施很大一部分依赖于它们.

2.5在存档之前,是否检查了代码在存储库中的许可证文件或任何特定特征?

软件遗产归档所有公开可用的东西,无需进行初步测试或检查。

这意味着您有责任检查在归档文件中找到的源代码是否可以重用,以及在哪些条件下可以重用。

对于您生成的代码,我们建议您遵循SWH指南,这包括添加许可信息。

2.6您是否也归档软件可执行文件(又称二进制文件)?

我们的核心任务是保存源代码,因为它是人类可读的,并且包含可执行文件中剥离出来的宝贵信息。因此,我们不会主动归档二进制文件,但是如果二进制文件包含在软件存储库中,我们不会在归档过程中过滤掉它们。因此,您可以在归档文件中找到一些二进制文件。

2.7在Software Heritage的git存储库中找不到我所有的“版本”,我该怎么办?

别担心,您的存储库已全部保存。
你所看到的只是术语上的区别
像GitHub这样的平台称为“releases”(任何未注释的git标记)和我们所称的“releases”(Merkle树中的一个节点,对应于git注释的标记)。这是一个常见问题,如中所示此讨论线索.

展开查看详细信息

 

假设您将您的发布标记为“FinalSubmission”,但您没有使用带注释的标记:在本例中,它不会显示在软件遗产的Releases选项卡中,但它仍然存在!单击Software Heritage Web界面上的branch下拉菜单,您会发现它列为“refs/tags/FinalSubmission”。如果你想让一个版本出现在我们的网页界面上,你应该创建你的标签
使用“git-tag-a”,而不是简单的“git-tag”,或者直接在代码托管平台上创建版本,在后台使用适当的“git-a”,然后将
再次存储库。

3.参考和识别

3.1什么是SWHID(软件遗产标识符)?

这个SWHID公司(软件遗产标识符)是一个持久的内在标识符,它是从软件构件本身唯一计算出来的。专门的博客文章来了解更多的内在和外在的标识符.

展开查看详细信息

 

有关语法、语义、互操作性和实现的所有详细信息都可以在中找到正式规范.

下图简明地显示了SWHID的关键组件:

信贷:软件遗产,2019年

图中顶部的黄色框对应于“核心SWHID“。可以添加限定词以提供有关对象在软件遗产图中的位置或其来源的附加信息,并标识代码片段。

3.2SWHID可以识别什么?

首先,让我们注意到软件可以在完全不同的粒度级别上进行识别,从概念级别(例如软件项目的名称)到具体的软件构件(例如包含大量文件的目录)。

来源:研究数据联盟/FORCE11软件源代码识别工作组,2020年,https://doi.org/10.15497/RDA00053

软件遗产标识符被设计为永久地和内在地标识与具体软件构件相对应的所有粒度级别:快照、发布、提交、目录、文件和代码片段。

展开查看详细信息

 

核心SWHID可用于标识以下源代码构件:

使用“线限定符,也可以标识代码片段,即选定的代码行。

例如,swh:1:cnt:94A9ED024D3859793618152EA559A168BBBCB5E2;线=4-6精确定位GPL3许可证全文的第4到第6行。

更一般地说,使用完全限定的SWHID提供了在上下文中放置软件构件的所有相关信息。例如,下面的SWHID将精确定位文件中包含的核心映射算法帕尔玛。毫升,位于src公司从中检索到的Parmap项目的特定修订的目录https://github.com/rdicomo/parmap

swh:1:cnt:3b997e8ef2e38d5b31fb353214a54686e72f0870;起源=https://github.com/rdicomo/parmap;就诊=swh:1:snp:25490d451af2414b2a08ece0df643dfdf2800084;锚=swh:1:版本:db44dc9cf7a6af7b56d8ebda8c75be3375c89282;路径=/src/parmap。毫升;线路=192-237

3.3如何获得软件的SWHID?

核心SWHID标识符是内在的,所以是的,您可以在您的机器上本地计算任何软件构件的核心SWHID!你可以找到说明书在这里提供的文档中!

您还可以直接从软件遗产档案:使用红色垂直标签“Permalinks”,显示在每个显示源代码的页面上(请参见更多细节请参考本指南). 第二种方法的优点是,您可以获得一个包含相关上下文信息的SWHID(例如,您的产品在软件开发全局图中的位置)。

展开查看详细信息

 

“Permalinks”选项卡允许您获取所浏览内容的SWHID。下面是一个例子:

点击“复制标识符”你可以在你的剪贴板上得到SWHID。点击“复制永久链接”你可以在你的剪贴板上得到相应的网址。

“添加上下文信息”复选框允许您选择是获取核心SWHID还是包含提供上下文信息的附加限定符的SWHID。

请注意,Permalinks选项卡提供了多种选择SWHID的选项(您可以选择文件内容、包含它的目录、修订、版本或快照)。请参阅以下问题以了解哪个最适合您的用例。

3.4我应该在文章/文档中使用哪种类型的SWHID?

这实际上取决于您的用例,但作为一个总体建议,我们建议采用目录的完整SWHID(包含上下文信息).

展开查看详细信息

 

在撰写研究文章、博客文章或技术文档时,人们可能会在需要提供最大数量的信息、使用完整的SWHID或保持参考简短(例如由于页面限制)之间面临一些紧张。

以下是解决此问题的建议最佳做法:

  1. 获取包含要引用的代码版本的“目录”的完整SWHID。下面是这样一个完整的SWHID示例:
    swh:1:方向:013573086777370b558b1a9ecb6d0dca9bb8ea18;起源=https://gitlab.com/lemta-rheosol/craft-virtual-dma;就诊=swh:1:snp:ef1a939275f05b667e189afbeed5fd59cca51c9d;锚=swh:1:版本:ad74f6a7f73c7906f9b36ee28dd006231f42552e
  2. 确保“核心SWHID”(swh:1:方向:013573086777370b558b1a9ecb6d0dca9bb8ea18在上面的示例中),并且完整的SWHID至少可以作为超链接使用。

在乳胶中可以实现如下效果:

\href{https://archive.softwareheritage.org/swh:1:dir:013573086777370b558b1a9ecb6d0dca9bb8ea18;起源=https://gitlab.com/lemta-rheosol/craft-virtual-dma;就诊=swh:1:snp:ef1a939275f05b667e189afbeed5fd59cca51c9d;锚=swh:1:版本:ad74f6a7f73c7906f9b36ee28dd006231f42552e/}{swh:1:目录:0135730867770B558B1A9ECB6D0DCA9BB8EA18}

或降价:swh:1:方向:013573086777370b558b1a9ecb6d0dca9bb8ea18

这种方法确保印刷的读者将找到对再现性最有用的标识符:目录的核心SWHID。的确,目录的核心SWHID可以从源代码的任何实例进行本地计算,独立于在特定项目中同时包含它的发布或提交。

在数字版本中可点击链接使用完整的SWHID让读者浏览软件遗产中的代码和所有适当的上下文(版本、来源等)。

3.5我想要完整的SWHID源代码,但不在存档中。我该怎么办?要多长时间?

如果您的代码(或其最新版本)尚未在存档中,则需要首先触发其存档。这可以用“立即保存代码”请求,或通过存款API。

一旦发出“立即保存代码”请求,代码的接收通常在几分钟内完成,具体取决于存储库的大小。完成后,save请求的状态将更新,您可以获得如前所示的SWHID。

当提交存款时,通常也会在几分钟内完成摄取,并且可以通过剑道状态响应访问SWHID。

4.访问和重用

4.1我可以重用在SWH上找到的源代码工件吗?

它取决于工件的许可证,与源代码一起存储:您必须在下载或重用它之前检查这个许可证。如果找不到许可证信息,则应假定您无权再使用它。

展开查看详细信息

 

存档中的所有软件组件都可能受版权或其他权利(如专利或商标)的保护。“软件遗产”可以提供关于软件许可证的自动衍生信息,这些信息可能适用于给定的软件组件,但它不声明其正确性,所提供的许可证信息不构成法律建议。您全权负责确定适用于存档中任何软件组件的许可证或其他权利,并且您必须遵守其条款。

4.2我可以使用SWH克隆存储库吗?

请不要直接从SWH克隆完整的存储库:它是一个归档文件,而不是伪造的。首先尝试从开发它的地方克隆一个存储库:它会更快,而且作为一个额外的好处,您将已经在正确的地方与它的开发人员进行交互。

展开查看详细信息

 

SWH将所有的软件构件存储在一个巨大的共享中梅克尔树,因此导出(特定版本的)已存档的存储库意味着遍历图形以获取所有相关内容,并将其打包以供使用。此操作比下载现有tar文件或从forge克隆存储库要昂贵得多。

如果SWH是您最后的选择,而您在其他地方找不到感兴趣的源代码,我们建议您只下载感兴趣的版本,使用目录“当您浏览存档时找到的下载按钮的选项。

如果绝对需要,你可以用更贵的修订“选项的下载按钮,这将为您准备相当于git裸克隆,可以脱机使用。这可能需要相当长的时间(对于大型存储库来说,需要几个小时,甚至几天)。

4.3我可以通过API检索源代码工件吗?

是的,你可以。如果您手头有SWHID,那么可以使用适当的API方法在端点之间导航,以跟踪项目构件的图形。查看API文档以了解端点列表.

展开查看详细信息

 

  • /api/1/快照/它允许您获取快照的分支和标记,每个分支和标记都带有目标\u url包含指向的URL的键
  • /api/1/发布//api/1/修订版/允许您获取修订或发布的数据。假设你得到了修改目录\u url密钥包含一个URL:
  • /api/1/目录/它列出根目录的条目,以及指向其他目录和内容对象的链接
  • /api/1/内容/它返回有关给定文件内容的所有信息,包括指向原始数据的链接。

也可以查找原点,并跟踪其访问:

  • /api/1/来源/搜索/允许您搜索代码存储库的确切URL
  • /api/1/原产地/访问/允许您列出软件遗产访问存储库的时间,并获取与每次访问关联的快照。对于每次访问,此快照作为快照\u url键,它包含获取相应快照对象的URL。

如果您对下载存储库的大部分内容(一个目录或一组修订版)感兴趣,您应该使用名为保险库. 这个拱顶允许您批量获取它们并下载tarball。vault端点列表位于所有API终结点列表

5.软件元数据

5.1我可以在我的软件中添加元数据吗?

普通用户可以在存储库中添加元数据文件,当使用特定的文件格式(codemeta.json、package.json、pom.xml等)时,这些元数据文件将被摄取并编制索引。

展开查看详细信息

 

跟随SWH指南关于如何准备代码存档。

有关索引格式的详细信息以及有关元数据工作流的一些概述,请参阅软件元数据挖掘

5.2使用“立即保存代码”从代码库中保存哪些元数据?

源代码存储库本身包含的所有元数据都将被保留。这将包括开发历史、提交日期和消息。
目前,使用“立即保存代码”功能时,不属于存储库一部分的其他元数据构件(称为外部元数据)不会被保留。

5.3存放的软件工件保存了哪些元数据?

所有的元数据是通过剑协议发送的,伴随着软件工件。有关更多信息,请访问存款凭证.

5.4什么是codemeta。json文件,为什么要使用它?

作为软件开发人员,我们可能希望为我们的项目提供一个机器可读的描述,但是用于描述软件的元数据模式太多了,很容易迷失方向。

这个CodeMeta倡议创建了一个通用词汇表来解决这个问题,基于软件应用软件源代码名门望族架构。组织主动性,并提供从其他medatada模式来回转换的工具。

这个代码元。json格式文件是CodeMeta词汇表的JSON-LD表示,可以使用开放源代码轻松创建和验证代码元生成器工具. 通过添加一个codemeta。json文件到您的项目中,您可以轻松地共享元数据信息,并减少在数据输入表单中重新键入大量信息的负担。

展开查看详细信息

 

例如,法国HAL国家开放存取档案寻找codemeta。json文件当一个软件项目存档在软件遗产是存放,并预先填写存款表使用它包含的信息,一个实时节省!

最后但并非最不重要,软件遗产索引codemeta中包含的元数据。json文件,并使用CodeMeta crosswalk表在web应用程序上进行搜索。crosswalk表是软件元数据的罗塞塔之石,促进了软件本体和元数据标准之间的转换。

作者:Gruenpeter M.和Thornton K.(2018年)《发现自由软件的途径》(LibrepNet 2018的幻灯片)。https://en.wikipedia.org/wiki/File:Pathways-免费探索。pdf格式

5.5 Software Heritage是否对元数据进行检查(例如,验证是否申报了许可证)?

简单的回答是否定的。软件遗产不会对归档的存储库执行任何优先过滤。