JavaScript 许可证网络标签:背景和理由
现如今,人们在网络浏览时通常都会在电脑里运行大量的专有软件,而大多数时间他们并不知情。自由软件在电脑桌面上的胜利有一部分要归结于 copyleft 的保护:使用户一定要被告知她有使用、学习、分享和修改自由软件的自由。在网络上,浏览器下载和运行 JavaScript 并不会告知用户所用程序的许可证、拥有的自由——或者被剥夺的自由。
针对这一问题,我们开发了 LibreJS 程序,它会甄别非寻常的 JavaScript 代码并查看其许可证。它的功能实现有赖于代码的许可证按照程序可以认识的方式标记。另外,所有 GNU 软件许可证都要求其发行者在软件中陈述其许可证,因此其接收者知晓他们的权利,并且知道去哪里找到源代码。
标记许可证的简单方法就是 在 JavaScript 代码中用特定格式注解许可证。不过,对于缩减版库文件,这个可能不是太方便,所以我们为之设计了另一种陈述许可证的方法:JavaScript 网络标签。
理由
当软件通过网络或其他互联网渠道发布时,自由软件许可证要求许可证拷贝和软件源代码总是应该简便易得。然而,发布嵌入在网站里的 JavaScript 由于特定的因素变得复杂:网站访问者通常不是表达了请求而获得软件,而且网管只能提供一份 JavaScript 代码文件(因此,他们无法按照许可证的要求,比如,发送包含其他源代码文件的档案)。
这些因素组合在一起就造成网管只有少数几个明显的方法来提供自由软件许可证要求的材料。最简单的方案是只按照源代码的形式使用 JavaScript,而源代码的注释中有一份许可证的全文拷贝。对小型网站,这个方案还可以接收,但是当 JavaScript 开始为大量重复的访问量使用的时候,可以理解网管就不再愿意提供如此大量的数据。我们的方案给网管们指明一个放置额外许可证资源的明确位置——也给访问者一个明确的位置来找到这些资源——这就解决了两方面的问题。第一,它通过提供一个 “JavaScript 许可证信息” 的链接让软件发布信息明确化。网管可以使用链接指向的位置发布许可证要求的资料,而这些对访问者重要的资料也不会使他们产生迷惑。
机器可读性
为了让人们能够更容易地拒绝浏览器里的非自由 JavaScript,我们的方案足够具体,插件或其他软件可以检测网站的 JavaScript 许可证信息表,并确认所有的 JavaScript 都符合已知的自由软件许可证,还可以下载源代码并确认网站使用的是相应的 JavaScript 优化代码。如此,访问者就能够快速而方便地检查这些 JavaScript 是否自由,并决定是否要运行它们。LibreJS 是一个基于 Mozilla 浏览器的插件,它可以帮助用户避免运行非自由的 JavaScript,并将实施这些检查来增强它的能力。
我们曾经考虑使用另一种格式,比如 RDF,作为我们系统的基础,这样可以通过给程序员更详细和更容易实现机器解析的信息让他们的工作更简单。但是,我们的目标首先是让人获得这些信息,其次才是机器。使用结构良好的 HTML 是最符合上述优先级的选择。
下一步
我们并没有说使用 JavaScript 自由软件的网管必须采纳这个指定的方法才能遵循许可证。每个自由软件许可证都明确列出了它们的条件,而每个愿意使用不同方法来遵循这些条件的网管都是受欢迎的。不过,我们的方法具有让访问者访问许可证信息全文的好处——这是迄今大家一直努力解决的问题——同时也不必牺牲网管提供 JavaScript 的自选最优方式。
我们非常愿意听到可以完成同样目标,而同时又使系统对网管、网站访问者或许可证检查软件的开发者更有用的反馈和建议。如果我们得到了能够显著改进这个方法的充分建议,我们会发布新的方法。(这也是此方法使用详细的许可证信息表格作为标识的原因:允许软件区分此方法和将来的新方法。)如果你对此感兴趣,请 订阅 LibreJS 邮件列表,并提出你的评价和建议。我们期待你的来信。