JavaScript 许可证 Web 标签:背景与原理
如今,用户在浏览网页时,通常会在自己的计算机上运行大量专有软件,而且往往在不知情的情况下。自由软件在桌面端取得成功的部分原因在于,其 Copyleft 保护机制确保用户在某个特定程序可以自由使用、研究、共享和修改时能被提前告知。在 Web 上,浏览器下载并运行 JavaScript,但从不告知用户该程序的许可证或他们的自由,或者其他程序如何剥夺用户的自由。
为了解决这个问题,我们开发了 LibreJS 程序,它可以识别重要的 JavaScript 代码并检查其许可证。它的运行取决于以一种缺乏人类智能的程序可以可靠识别的方式指定许可证。此外,所有 GNU 软件许可证都要求发行者在软件中声明许可证,以便接收者知道他们的权利,并说明在哪里可以找到源代码。
指定许可证的简单方法是在 JavaScript 代码中使用风格化的注释。然而,这对于最小化的库文件来说可能不方便,因此我们开发了另一种声明许可证的方法:JavaScript Web 标签。
原理
当软件通过 Web 或其他 Internet 渠道分发时,自由软件许可证中包含许可证条款副本和访问源代码的条件几乎总是很容易遵循的。然而,在网站中嵌入分发 JavaScript 的复杂之处在于以下几个独特因素:访问者通常会在没有明确请求的情况下接收软件,而且网站管理员只能提供单个 JavaScript 代码文件(因此,他们不能例如,发送一个包含许可证要求的其他资源的存档文件)。
这些问题结合在一起,使得网站管理员几乎没有明显的方法来提供自由软件许可证要求的其他材料。最简单的解决方案是仅以源代码形式提供 JavaScript,并在其注释中包含许可证的完整副本。这在较小的站点上是可以接受的,但是当 JavaScript 开始代表大量的重复流量时,网站管理员可以理解地不愿提供如此多的数据。我们的方法通过解决这两个问题,为他们提供了一个明确的提供其他许可证资源的场所,并为访问者提供了一个明确的查找场所。首先,它通过链接提供“JavaScript 许可证信息”来使软件分发可见。链接的页面为网站管理员提供了一个空间,他们可以在其中发布那些资源,这些资源既突出又不会让访问者感到困惑。
机器可读性
为了让人们更容易在其浏览器中拒绝非自由 JavaScript,我们的方法足够具体,以便插件或其他软件可以找到该站点的 JavaScript 许可证信息表,确认所有 JavaScript 都在已知的自由许可证下,下载源代码,并确认它与从站点提供的优化 JavaScript 相对应。这样,访问者可以快速方便地检查 JavaScript 是否是自由的,并相应地决定是否要运行它。LibreJS 是基于 Mozilla 的浏览器的插件,可帮助用户避免运行非自由 JavaScript,并且它将实施这些检查以增强其功能。
我们考虑使用另一种格式(如 RDF)作为我们系统的基础,以便通过以易于解析的格式为程序员提供更详细的信息来简化这项工作。但是,我们的目标是首先使这些信息对人类读者可访问,其次才对机器可访问。使用结构良好的 HTML 可以最好地匹配这些优先级。
下一步
我们并不是说托管自由软件 JavaScript 的网站管理员必须遵循这种特定的方法才能遵守许可证。每个自由软件许可证都明确规定了自己的条件,并且任何想要使用符合这些条件的不同方法的网站管理员都欢迎这样做。但是,这种方法的好处是使访问者可以轻松访问完整的许可证信息,这是一个迄今为止难以解决的问题,而不会损害网站管理员以他们认为最佳的方式提供 JavaScript 的能力。
我们非常希望听到有关我们可能实现相同目标的其他方式的反馈和建议,同时使该系统对网站管理员、站点访问者或从事许可证检查软件的开发人员更有用。如果我们获得足够的建议以发布一种明显优于此方法的新方法,我们将这样做。(这就是为什么这种方法对许可证信息表使用如此冗长的标识符的原因:为了使软件能够将此方法与我们将来可能创建的其他方法区分开来。)如果您对此问题感兴趣,请订阅 LibreJS 邮件列表,并在其中写下您的意见和建议。我们期待着您的来信。