2021年3月

每个程序员都应该明白的 171 个字。

MIT 许可证 是世界上最流行的开源软件许可证。以下是它的逐行解读。

阅读许可证

如果你参与了开源软件,但还没有花时间从头到尾的阅读过这个许可证(它只有 171 个单词),你需要现在就去读一下。尤其是如果许可证不是你日常每天都会接触的,把任何看起来不对劲或不清楚的地方记下来,然后继续阅读。我会分段、按顺序、加入上下文和注释,把每一个词再重复一遍。但最重要的还是要有个整体概念。

The MIT License (MIT)

Copyright (c)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.

(LCTT 译注:MIT 许可证并无官方的中文文本,我们也没找到任何可靠的、精确的非官方中文文本。在本文中,我们仅作为参考目的提供一份逐字逐行而没有经过润色的中文翻译文本,但该文本及对其的理解不能作为 MIT 许可证使用,我们也不为此中文翻译文本的使用承担任何责任,这份中文文本,我们贡献给公共领域。)

MIT 许可证(MIT)

版权 (c) <年份> <版权人>

特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利,须在下列条件下:

上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。

本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。

该许可证分为五段,按照逻辑划分如下:

  • 头部

    • 许可证名称:“MIT 许可证”
    • 版权说明:“版权 (c) …”
  • 许可证授予:“特此授予 …”

    • 授予范围:“… 处置软件 …”
    • 条件:“… 须在 …”

      • 归因和声明:“上述 … 应包含在 …”
      • 免责声明:“本软件是‘如此’提供的 …”
      • 责任限制:“在任何情况下 …”

接下来详细看看。

头部

许可证名称

The MIT License (MIT)
MIT 许可证(MIT)

“MIT 许可证”不是一个单一的许可证,而是根据 麻省理工学院 Massachusetts Institute of Technology (MIT)为发行版本准备的语言衍生出来一系列许可证形式。多年来,无论是对于使用它的原始项目,还是作为其他项目的范本,它经历了许多变化。Fedora 项目一直保持着 收藏 MIT 许可证的好奇心,以纯文本的方式记录了那些平淡的变化,如同泡在甲醛中的解剖标本一般,追溯了它的各种演变。

幸运的是, 开放源码倡议组织 Open Source Initiative (OSI) 和 软件数据包交换 Software Package Data eXchange 组织(SPDX)已经将一种通用的 MIT 式的许可证形式标准化为“ MIT 许可证 The MIT License ”。OSI 反过来又采用了 SPDX 通用开源许可证的标准化 字符串标志符,并将其中的 “MIT” 明确指向了标准化形式的“MIT 许可证”。如果你想为一个新项目使用 MIT 式的条款,请使用其 标准化的形式

即使你在 LICENSE 文件中包含 “The MIT License” 或 “SPDX:MIT”,任何负责的审查者仍会将文本与标准格式进行比较,以确保安全。尽管自称为“MIT 许可证”的各种许可证形式只在细微的细节上有所不同,但所谓的“MIT 许可证”的松散性已经诱使了一些作者加入麻烦的“自定义”。典型的糟糕、不好的、非常坏的例子是 JSON 许可证,一个 MIT 家族的许可证被加上了“本软件应用于善,而非恶”。这件事情可能是“非常克罗克福特”的(LCTT 译者注,Crockford 是 JSON 格式和 JSON.org 的作者)。这绝对是一件麻烦事,也许这个玩笑本来是开在律师身上的,但他们却笑得前仰后合。

这个故事的寓意是:“MIT 许可证”本身就是模棱两可的。大家可能很清楚你的意思,但你只需要把标准的 MIT 许可证文本复制到你的项目中,就可以节省每个人的时间。如果使用元数据(如包管理器中的元数据文件)来指定 “MIT 许可证”,请确保 LICENSE 文件和任何头部的注释都使用标准的许可证文本。所有的这些都可以 自动化完成

版权声明

Copyright (c)
版权 (c) <年份> <版权持有人>

在 1976 年(美国)《版权法》颁布之前,美国的版权法规要求采取具体的行动,即所谓的“手续”来确保创意作品的版权。如果你不遵守这些手续,你起诉他人未经授权使用你的作品的权力就会受到限制,往往会完全丧失权力,其中一项手续就是“ 声明 notice ”。在你的作品上打上记号,以其他方式让市场知道你拥有版权。“©” 是一个标准符号,用于标记受版权保护的作品,以发出版权声明。ASCII 字符集没有 © 符号,但 Copyright (c) 可以表达同样的意思。

1976 年的《版权法》“落实”了国际《 伯尔尼公约 Berne Convention 》的许多要求,取消了确保版权的手续。至少在美国,著作权人在起诉侵权之前,仍然需要对自己的版权作品进行登记,如果在侵权行为开始之前进行登记,可能会获得更高的赔偿。但在实践中,很多人在对某个人提起诉讼之前,都会先注册版权。你并不会因为没有在上面贴上声明、注册它、向国会图书馆寄送副本等而失去版权。

即使版权声明不像过去那样绝对必要,但它们仍然有很多用处。说明作品的创作年份和版权属于谁,可以让人知道作品的版权何时到期,从而使作品纳入公共领域。作者或作者们的身份也很有用。美国法律对个人作者和“公司”作者的版权条款的计算方式不同。特别是在商业用途中,公司在使用已知竞争对手的软件时,可能也要三思而行,即使许可条款给予了非常慷慨的许可。如果你希望别人看到你的作品并想从你这里获得许可,版权声明可以很好地起到归属作用。

至于“ 版权持有人 copyright holder ”。并非所有标准形式的许可证都有写明这一点的空间。最新的许可证形式,如 Apache 2.0GPL 3.0,发布的许可证文本是要逐字复制的,并在其他地方加上标题注释和单独文件,以表明谁拥有版权并提供许可证。这些办法巧妙地阻止了对“标准”文本的意外或故意的修改。这还使自动许可证识别更加可靠。

MIT 许可证是从为机构发布的代码而写的语言演变而来。对于机构发布的代码,只有一个明确的“版权持有人”,即发布代码的机构。其他机构抄袭了这些许可证,用他们自己的名字代替了 “MIT”,最终形成了我们现在拥有的通用形式。这一过程同样适用于该时代的其他简短的机构许可证,特别是加州大学伯克利分校的最初的 四条款 BSD 许可证 four-clause BSD License 成为了现在使用的 三条款两条款 变体,以及 MIT 许可证的变体 互联网系统联盟 Internet Systems Consortium ISC 许可证

在每一种情况下,该机构都根据版权所有权规则将自己列为版权持有人,这些规则称为“雇佣作品”规则,这些规则赋予雇主和客户在其雇员和承包商代表其从事的某些工作中的版权所有权。这些规则通常不适用于自愿提交代码的分布式协作者。这给项目监管型基金会(如 Apache 基金会和 Eclipse 基金会)带来了一个问题,因为它们接受来自更多不同的贡献者的贡献。到目前为止,通常的基础方法是使用一个单一的许可证,它规定了一个版权持有者,如 Apache 2.0EPL 1.0,并由 贡献者许可协议 contributor license agreements Apache CLA 以及 Eclipse CLA 为后盾,以从贡献者中收集权利。在像 GPL 这样的 左版 copyleft 许可证下,将版权所有权收集在一个地方就更加重要了,因为 GPL 依靠版权所有者来执行许可证条件,以促进软件自由的价值。

如今,大量没有机构或商业管理人的项目都在使用 MIT 风格的许可条款。SPDX 和 OSI 通过标准化不涉及特定实体或机构版权持有人的 MIT 和 ISC 之类的许可证形式,为这些用例提供了帮助。有了这些许可证形式,项目作者的普遍做法是在许可证的版权声明中尽早填上自己的名字...也许还会在这里或那里填上年份。至少根据美国的版权法,由此产生的版权声明并不能说明全部情况。

软件的原始所有者保留其工作的所有权。但是,尽管 MIT 风格的许可条款赋予了他人开发和更改软件的权利,创造了法律上所谓的“衍生作品”,但它们并没有赋予原始作者对他人的贡献的所有权。相反,每个贡献者在以现有代码为起点所做的任何作品都拥有版权,即使是稍做了一点创意

这些项目大多数也对接受 贡献者许可协议 contributor license agreements (CLA)的想法嗤之以鼻,更不用说签署版权转让协议了。这既幼稚又可以理解。尽管一些较新的开源开发人员认为,在 GitHub 上发送 拉取请求 Pull Request ,就会“自动”根据项目现有的许可证条款授权分发贡献,但美国法律不承认任何此类规则。强有力的版权保护是默认的,而不是宽松许可。

更新:GitHub 后来修改了全站的服务条款,包括试图至少在 GitHub.com 上改变这一默认值。我在 另一篇文章 中写了一些对这一发展的想法,并非所有想法都是积极的。

为了填补法律上有效的、有据可查的贡献权利授予与完全没有纸质痕迹之间的差距,一些项目采用了 开发者原创证书 Developer Certificate of Origin ,这是贡献者在 Git 提交中使用 Signed-Off-By 元数据标签暗示的标准声明。开发者原创证书是在臭名昭著的 SCO 诉讼之后为 Linux 内核开发而开发的,该诉讼称 Linux 的大部分代码源自 SCO 拥有的 Unix 源代码。作为创建显示 Linux 的每一行都来自贡献者的书面记录的一种方法,开发者原创证书的功能良好。尽管开发者原创证书不是许可证,但它确实提供了大量证据,证明提交代码的人希望项目分发其代码,并让其他人根据内核现有的许可证条款使用该代码。内核还维护着一个机器可读的 CREDITS 文件,其中列出了贡献者的名字、所属机构、贡献领域和其他元数据。我做了 一些 实验,把这种方法改编成适用于不使用内核开发流程的项目。

许可证授权

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人

MIT 许可证的实质是许可证(你猜对了)。一般来说,许可证是一个人或法律实体(“ 许可人 licensor ”)给予另一个人(“ 被许可人 licensee ”)做一些法律允许他们起诉的事情的许可。MIT 许可证是一种不起诉的承诺。

法律有时将许可证与给予许可证的承诺区分开来。如果有人违背了提供许可证的承诺,你可以起诉他们违背了承诺,但你最终可能得不到许可证。“ 特此 Hereby ”是律师们永远摆脱不了的一个矫揉造作、老生常谈的词。这里使用它来表明,许可证文本本身提供了许可证,而不仅仅是许可证的承诺。这是一个合法的 即调函数表达式(IIFE)

尽管许多许可证都是授予特定的、指定的被许可人的,但 MIT 许可证是一个“ 公共许可证 public license ”。公共许可证授予所有人(整个公众)许可。这是开源许可中的三大理念之一。MIT 许可证通过“向任何获得……软件副本的人”授予许可证来体现这一思想。稍后我们将看到,获得此许可证还有一个条件,以确保其他人也可以了解他们的许可。

在美国式法律文件中,括号中带引号的首字母大写词汇是赋予术语特定含义的标准方式(“定义”)。当法庭看到文件中其他地方使用了一个已定义的大写术语时,法庭会可靠地回顾定义中的术语。

授权范围

to deal in the Software without restriction,
不受限制地处置该软件的权利,

从被许可人的角度来看,这是 MIT 许可证中最重要的七个字。主要的法律问题就是因侵犯版权而被起诉,和因侵犯专利而被起诉。无论是版权法还是专利法都没有将 “ 处置 to deal in ” 作为一个术语,它在法庭上没有特定的含义。因此,任何法庭在裁决许可人和被许可人之间的纠纷时,都会询问当事人对这一措辞的含义和理解。法庭将看到的是,该措辞有意宽泛和开放。它为被许可人提供了一个强有力的论据,反对许可人提出的任何主张 —— 即他们不允许被许可人使用该软件做那件特定的事情,即使在授予许可证时双方都没有明显想到。

including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利,

没有一篇法律是完美的、“意义上完全确定”、或明确无误的。小心那些假装不然的人。这是 MIT 许可证中最不完美的部分。主要有三个问题:

首先,“ 包括不受限制地 including without limitation ”是一种法律反模式。它有多种衍生:

  • 包括,但不受限制 including, without limitation
  • 包括,但不限于前述的一般性 including, without limiting the generality of the foregoing
  • 包括,但不限于 including, but not limited to
  • 很多、很多毫无意义的变化

所有这些都有一个共同的目标,但都未能可靠地实现。从根本上说,使用它们的起草者也会尽量试探着去做。在 MIT 许可证中,这意味着引入“ 处置软件 dealing in the Software ”的具体例子 — “使用、复制、修改”等等,但不意味着被许可方的行为必须与给出的例子类似,才能算作“处置”。问题是,如果你最终需要法庭来审查和解释许可证的条款,法庭将把它的工作看作是找出这些语言的含义。如果法庭需要决定“ 处置 deal in ”的含义,它不能“无视”这些例子,即使你告诉它。我认为,“不受限制地处置本软件”本身对被许可人更好,也更短。

其次,作为“ 处置 deal in ”的例子的那些动词是一个大杂烩。有些在版权法或专利法下有特定的含义,有些稍微有或根本没有含义:

  • 使用 use ”出现在 《美国法典》第 35 篇,第 271(a)节,这是专利法中专利权人可以起诉他人未经许可的行为的清单。
  • 复制 copy ”出现在 《美国法典》第 17 篇,第 106 节,即版权法列出的版权所有人可以起诉他人未经许可的行为。
  • 修改 modify ”既不出现在版权法中,也不出现在专利法中。它可能最接近版权法下的“ 准备衍生作品 prepare derivative works ”,但也可能涉及改进或其他衍生发明。
  • 无论是在版权法还是专利法中,“ 合并 merge ”都没有出现。“ 合并 merger ”在版权方面有特定的含义,但这显然不是这里的意图。相反,法庭可能会根据其在行业中的含义来解读“合并”,如“合并代码”。
  • 无论是在版权法还是专利法中,都没有“ 发布 publish ”。由于“软件”是被发布的内容,根据《版权法》,它可能最接近于“ 分发 distribute ”。该法令还包括“公开”表演和展示作品的权利,但这些权利只适用于特定类型的受版权保护的作品,如戏剧、录音和电影。
  • 分发 distribute ”出现在《版权法》中。
  • 转授许可 sublicense ”是知识产权法中的一个总称。转授许可的权利是指把自己的许可证授予他人,有权进行你所许可的部分或全部活动。实际上,MIT 许可证的转授许可的权利在开源代码许可证中并不常见。通常的做法是 Heather Meeker 所说的“ 直接许可 direct licensing ”方式,在这种方法中,每个获得该软件及其许可证条款副本的人都直接从所有者那里获得授权。任何可能根据 MIT 许可证获得转授许可的人都可能会得到一份许可证副本,告诉他们其也有直接许可证。
  • 出售副本 sell copies ”是个混杂品。它接近于《专利法》中的“ 要约出售 offer to sell ”和“ 出售 sell ”,但指的是“ 副本 coyies ”,这是一种版权概念。在版权方面,它似乎接近于“ 分发 distribute ”,但《版权法》没有提到销售。
  • 允许被配发了本软件的人这样做 permit persons to whom the Software is furnished to do so ”似乎是多余的“转授许可”。这也是不必要的,因为获得副本的人也可以直接获得许可证。

最后,由于这种法律、行业、一般知识产权和一般使用条款的混杂,并不清楚 MIT 许可证是否包括专利许可。一般性语言“ 处置 deal in ”和一些例子动词,尤其是“使用”,指向了一个专利许可,尽管是一个非常不明确的许可。许可证来自于版权持有人,而版权持有人可能对软件中的发明拥有或不拥有专利权,以及大多数的例子动词和“ 软件 the Software ”本身的定义,都强烈地指向版权许可证。诸如 Apache 2.0 之类的较新的宽容开源许可分别具体地处理了版权、专利甚至商标问题。

三个许可条件

subject to the following conditions:
须在下列条件下:

总有一个陷阱!MIT 许可证有三个!

如果你不遵守 MIT 许可证的条件,你就得不到许可证提供的许可。因此,如果不能履行条件,至少从理论上说,会让你面临一场诉讼,很可能是一场版权诉讼。

开源软件的第二个伟大思想是,利用软件对被许可人的价值来激励被许可人遵守条件,即使被许可人没有支付任何许可费用。最后一个伟大思想,在 MIT 许可证中没有,它构建了许可证条件:像 GNU 通用公共许可证(GPL)这样的左版许可证,使用许可证条件来控制如何对修改后的版本进行许可和发布。

声明条件

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。

如果你给别人一份软件的副本,你需要包括许可证文本和任何版权声明。这有几个关键目的:

  1. 给别人一个声明,说明他们有权使用该公共许可证下的软件。这是直接授权模式的一个关键部分,在这种模式下,每个用户直接从版权持有人那里获得许可证。
  2. 让人们知道谁是软件的幕后人物,这样他们就可以得到赞美、荣耀和冷冰冰的现金捐赠。
  3. 确保保修免责声明和责任限制(在后面)伴随该软件。每个得到该副本的人也应该得到一份这些许可人保护的副本。

没有什么可以阻止你对提供一个副本、甚至是一个没有源代码的编译形式的副本而收费。但是当你这么做的时候,你不能假装 MIT 代码是你自己的专有代码,也不能在其他许可证下提供。接受的人要知道自己在“公共许可证”下的权利。

坦率地说,遵守这个条件正在崩溃。几乎所有的开源许可证都有这样的“ 归因 attribution ”条件。系统和装机软件的制作者往往明白,他们需要为自己的每一个发行版本编制一个声明文件或“许可证信息”屏,并附上库和组件的许可证文本副本。项目监管型基金会在教授这些做法方面起到了重要作用。但是整个 Web 开发者群体还没有取得这种经验。这不能用缺乏工具来解释,工具有很多,也不能用 npm 和其他资源库中的包的高度模块化来解释,它们统一了许可证信息的元数据格式。所有好的 JavaScript 压缩器都有保存许可证标题注释的命令行标志。其他工具可以从包树中串联 LICENSE 文件。这实在是没有借口。

免责声明

The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement.
本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。

美国几乎每个州都颁布了一个版本的《 统一商业法典 Uniform Commercial Code 》(UCC),这是一部规范商业交易的示范性法律。UCC 的第 2 条(加利福尼亚州的“第 2 部分”)规定了商品销售合同,包括了从二手汽车的购买到向制造厂运送大量工业化学品。

UCC 关于销售合同的某些规则是强制性的。这些规则始终适用,无论买卖双方是否喜欢。其他只是“默认”。除非买卖双方以书面形式选择不适用这些默认,否则 UCC 潜在视作他们希望在 UCC 文本中找到交易的基准规则。默认规则中包括隐含的“ 免责 warranties ”,或卖方对买方关于所售商品的质量和可用性的承诺。

关于诸如 MIT 许可证之类的公共许可证是合同(许可方和被许可方之间的可执行协议)还是仅仅是许可证(单向的,但可能有附加条件),这在理论上存在很大争议。关于软件是否被视为“商品”,从而触发 UCC 规则的争论较少。许可人之间没有就赔偿责任进行辩论:如果他们免费提供的软件出现故障、导致问题、无法正常工作或以其他方式引起麻烦,他们不想被起诉和被要求巨额赔偿。这与“ 默示保证 implied warranty ”的三个默认规则完全相反:

  1. UCC 第 2-314 节,“ 适销性 merchantability ”的默示保证是一种承诺:“商品”(即软件)的质量至少为平均水平,并经过适当包装和标记,并适用于其常规用途。仅当提供该软件的人是该软件的“商人”时,此保证才适用,这意味着他们从事软件交易,并表现出对软件的熟练程度。
  2. UCC 第 2-315 节,当卖方知道买方依靠他们提供用于特定目的的货物时,“ 适用于某一特定目的 fitness for a particular purpose ”的默示保证就会生效。商品实际上需要“适用”这一目的。
  3. 非侵权 noninfringement ”的默示保证不是 UCC 的一部分,而是一般合同法的共同特征。如果事实证明买方收到的商品侵犯了他人的知识产权,则这种默示的承诺将保护买方。如果根据 MIT 许可证获得的软件实际上并不属于尝试许可该软件的许可人,或者属于他人拥有的专利,那就属于这种情况。

UCC 的 第2-316(3)节 要求,选择不适用或“排除”适销性和适用于某一特定目的的默示保证措辞必须醒目。“醒目”意味着书面化或格式化,以引起人们的注意,这与旨在从不小心的消费者身边溜走的细小字体相反。各州法律可以对不侵权的免责声明提出类似的引人注目的要求。

长期以来,律师们都有一种错觉,认为用“全大写”写任何东西都符合明显的要求。这是不正确的。法庭曾批评律师协会自以为是,而且大多数人都认为,全大写更多的是阻止阅读,而不是强制阅读。同样的,大多数开源许可证的形式都将其免责声明设置为全大写,部分原因是这是在纯文本的 LICENSE 文件中唯一明显的方式。我更喜欢使用星号或其他 ASCII 艺术,但那是很久很久以前的事了。

责任限制

In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.
在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。

MIT 许可证授予软件“免费”许可,但法律并不认为接受免费许可证的人在出错时放弃了起诉的权利,而许可人应该受到责备。“责任限制”,通常与“损害赔偿排除”条款搭配使用,其作用与许可证很像,是不起诉的承诺。但这些都是保护许可人免受被许可人起诉的保护措施。

一般来说,法庭对责任限制和损害赔偿排除条款的解读非常谨慎,因为这些条款可以将大量的风险从一方转移到另一方。为了保护社会的切身利益,让民众有办法纠正在法庭上所犯的错误,他们“严格地”用措辞限制责任,尽可能地对受其保护的一方进行解读。责任限制必须具体才能成立。特别是在“消费者”合同和其他放弃起诉权的人缺乏成熟度或讨价还价能力的情况下,法庭有时会拒绝尊重那些似乎被埋没在视线之外的措辞。部分是出于这个原因,部分是出于习惯,律师们往往也会给责任限制以全大写处理。

再往下看,“责任限制”部分是对被许可人可以起诉的金额上限。在开源许可证中,这个上限总是没有钱,0 元,“不承担责任”。相比之下,在商业许可证中,它通常是过去 12 个月内支付的许可证费用的倍数,尽管它通常是经过谈判的。

“排除”部分具体列出了各种法律主张,即请求赔偿的理由,许可人不能使用。像许多其他法律形式一样,MIT 许可证 提到了“ 违约 of contract ”行为(即违反合同)和“ 侵权 of tort ”行为。侵权规则是防止粗心或恶意伤害他人的一般规则。如果你在发短信时在路上撞倒了人,你就犯了侵权行为。如果你的公司销售的有问题的耳机会烧伤人们的耳朵,则说明贵公司已经侵权。如果合同没有明确排除侵权索赔,那么法庭有时会在合同中使用排除措辞以防止合同索赔。出于很好的考虑,MIT 许可证抛出“或其它”字样,只是为了截住奇怪的海事法或其它异国情调的法律主张。

产生于、源于或有关于 arising from, out of or in connection with ”这句话是法律起草人固有的、焦虑的不安全感反复出现的症状。关键是,任何与软件有关的诉讼都被这些限制和排除范围所覆盖。万一某些事情可以“ 产生于 arising from ”,但不能“ 源于 out of ”或“ 有关于 in connection with ”,那就最好把这三者都写在里面,所以要把它们打包在一起。更不用说,任何被迫在这部分内容中斤斤计较的法庭将不得不为每个词提出不同的含义,前提是专业的起草者不会在一行中使用不同的词来表示同一件事。更不用说,在实践中,如果法庭对一开始就不利的限制感觉不好,那么他们会更愿意狭隘地解读范围触发器。但我离题了,同样的语言出现在数以百万计的合同中。

总结

所有这些诡辩都有点像在进教堂的路上吐口香糖。MIT 许可证是一个法律经典,且有效。它绝不是解决所有软件知识产权弊病的灵丹妙药,尤其是它比已经出现的软件专利灾难还要早几十年。但 MIT 风格的许可证发挥了令人钦佩的作用,实现了一个狭隘的目的,用最少的、谨慎的法律工具组合扭转了版权、销售和合同法等棘手的默认规则。在计算机技术的大背景下,它的寿命是惊人的。MIT 许可证已经超过、并将要超过绝大多数软件许可证。我们只能猜测,当它最终失去青睐时,它能提供多少年的忠实法律服务。对于那些无法提供自己的律师的人来说,这尤其慷慨。

我们已经看到,我们今天所知道的 MIT 许可证是如何成为一套具体的、标准化的条款,使机构特有的、杂乱无章的变化终于有了秩序。

我们已经看到了它对归因和版权声明的处理方法如何为学术、标准、商业和基金会机构的知识产权管理实践提供信息。

我们已经看到了 MIT 许可证是如何运行所有人免费试用软件的,但前提是要保护许可人不受担保和责任的影响。

我们已经看到,尽管有一些生硬的措辞和律师的矫揉造作,但一百七十一个小词可以完成大量的法律工作,为开源软件在知识产权和合同的密集丛林中开辟一条道路。

我非常感谢所有花时间阅读这篇相当长的文章的人,让我知道他们发现它很有用,并帮助改进它。一如既往,我欢迎你通过 e-mailTwitterGitHub 发表评论。


有很多人问,他们在哪里可以读到更多的东西,或者找到其他许可证,比如 GNU 通用公共许可证或 Apache 2.0 许可证。无论你的兴趣是什么,我都会向你推荐以下书籍:

我先说这本,因为虽然它有些过时,但它的方法也最接近上面使用的逐行方法。O'Reilly 已经把它放在网上
在我看来,这是迄今为止关于 GNU 通用公共许可证和更广泛的左版的最佳著作。这本书涵盖了历史、许可证、它们的发展,以及兼容性和合规性。这本书是我给那些考虑或处理 GPL 的客户的书。
一本很棒的入门书,也可以免费 在线阅读。对于从零开始的程序员来说,这是开源许可和相关法律的最好介绍。这本在一些具体细节上也有点过时了,但 Larry 的许可证分类法和对开源商业模式的简洁总结经得起时间的考验。

所有这些都对我作为一个开源许可律师的教育至关重要。它们的作者都是我的职业英雄。请读一读吧 — K.E.M

我将此文章基于 Creative Commons Attribution-ShareAlike 4.0 license 授权


via: https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html

作者:Kyle E. Mitchell 选题:lujun9972 译者:bestony 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

写字的纸条就能骗过 OpenAI 的物体识别

OpenAI 的研究人员发现了一种令人震惊的简单方法来蒙蔽他们的对象识别软件,而且只需要笔和纸就可以进行。只要在一张纸上写上 “iPod” 的字样,贴在一只苹果上,就能骗过他们最新的计算机视觉模型 CLIP,该软件会错误地将这个水果归类为音乐播放器。

研究人员认为,像这样的攻击远非单纯的学术问题,通过利用模型强大的文字阅读能力,即使是手写文字的照片也经常可以欺骗模型。OpenAI 的模型是使用文本的图片以及从互联网上搜刮的物体图像进行训练的,因此被所谓这种“排版攻击”误导也不足为奇。

这种所谓的“智能”,有时候还是很笨拙的,没有“智慧”的“智能”始终也只是算法和数据而已。

谷歌的多平台应用框架 Flutter 发布 2.0,支持 Web 应用

Flutter 允许开发者创建一个单一的代码库,可以为 Android、iOS、Windows、macOS 和 Linux、Web 和嵌入式设备生成应用,不过桌面操作系统的支持还不稳定。最重要的是,Flutter 2.0 从主要是一个移动平台,拓展到现在可以真正实现跨移动、桌面、Web 和嵌入式的可移植性。

谷歌的大量应用都依赖于 Flutter,这包括 Google One、Google Pay、Nest Hub、Google Ads、Google Shopping、Google Analytics、Cloud Search 等等。

这样一个重要的里程碑版本,值得开发者们学习了解一下。不过,新东西太多了,感觉有点学不过来了。

RHEL 自助服务的价格翻了一番,但是软件没变

2019 年红帽公司下线了其 RHEL Server 自助服务(RH0197181),而被 RHEL Server 入门级自助服务(RH00005)所取代。它们的售价都是 349 美元,但只有停售那款才允许使用最低程度的虚拟功能。现在客户发现,需要支付两倍以上的费用(每年 799 美元)才能在虚拟机中运行 RHEL。换言之,你想不要红帽的技术支持就运行虚拟机,也必须多花一倍的钱,哪怕你真的不需要那些技术支持。

在红帽公司停止其免费的 CentOS 之后,该公司已经明确表示,它对那些只付很少费用或不付费用的用户没有什么兴趣。即便是为了安抚不满的 CentOS 用户而推出的 RHEL 开发者订阅,根据使用条款,不允许用在企业生产环境。而现在,对 RHEL 商业客户也开始层层加码,我觉得,可能红帽的营收压力太大了。

Erlang 是一种用于构建大规模可扩展实时系统的函数式编程语言。Erlang 最初是由 爱立信 创建的专有软件,后来被开源。

Erlang 在 Ubuntu 的 Universe 仓库 中可用。启用该仓库后,你可以使用下面的命令轻松安装它:

sudo apt install erlang

但是,Ubuntu 仓库提供的 Erlang 版本可能不是最新的

如果你想要 Ubuntu 上最新的 Erlang 版本,你可以添加 Erlang Solutions 提供的仓库。它们为各种 Linux 发行版、Windows 和 macOS 提供了预编译的二进制文件。

如果你之前安装了一个名为 erlang 的包,那么它将会被升级到由添加的仓库提供的较新版本。

在 Ubuntu 上安装最新版本的 Erlang

你需要在 Linux 终端下载密钥文件。你可以使用 wget 工具,所以请确保你已经安装了它:

sudo apt install wget

接下来,使用 wget 下载 Erlang Solution 仓库的 GPG 密钥,并将其添加到你的 apt 打包系统中。添加了密钥后,你的系统就会信任来自该仓库的包。

wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add -

现在,你应该在你的 APT sources.list.d 目录下为 Erlang 添加一个文件,这个文件将包含有关仓库的信息,APT 包管理器将使用它来获取包和未来的更新。

对于 Ubuntu 20.04(和 Ubuntu 20.10),使用以下命令:

echo "deb https://packages.erlang-solutions.com/ubuntu focal contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list

我知道上面的命令提到了 Ubuntu 20.04 focal,但它也适用于 Ubuntu 20.10 groovy。

对于 Ubuntu 18.04,使用以下命令:

echo "deb https://packages.erlang-solutions.com/ubuntu bionic contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list

你必须更新本地的包缓存,以通知它关于新添加的仓库的包。

sudo apt update

你会注意到,它建议你进行一些升级。如果你列出了可用的升级,你会在那里找到 erlang 包。要更新现有的 erlang 版本或重新安装,使用这个命令:

sudo apt install erlang

安装好后,你可以测试一下。

要退出 Erlang shell,使用 Ctrl+g,然后输入 q,由于我从来没有用过 Erlang,所以我只好尝试了一些按键,然后发现了操作方法。

删除 erlang

要删除该程序,请使用以下命令:

sudo apt remove erlang

还会有一些依赖关系。你可以用下面的命令删除它们:

sudo apt autoremove

如果你愿意,你也可以删除添加的仓库文件。

sudo rm /etc/apt/sources.list.d/erlang-solution.list

就是这样。享受在 Ubuntu Linux 上使用 Erlang 学习和编码的乐趣。


via: https://itsfoss.com/install-erlang-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

终端仿真器(或简称终端)是任何 Linux 发行版中不可或缺的一部分。

当你改变发行版的主题时,往往终端也会自动得到改造。但这并不意味着你不能进一步定制终端。

事实上,很多读者都问过我们,为什么我们截图或视频中的终端看起来那么酷,我们用的是什么字体等等。

为了回答这个经常被问到的问题,我将向你展示一些简单或复杂的调整来改变终端的外观。你可以在下图中对比一下视觉上的差异:

自定义 Linux 终端

本教程利用 Pop!\_OS 上的 GNOME 终端来定制和调整终端的外观。但是,大多数建议也应该适用于其他终端。

对于大多数元素,如颜色、透明度和字体,你可以利用 GUI 来调整它,而不需要输入任何特殊的命令。

打开你的终端。在右上角寻找汉堡菜单。在这里,点击 “偏好设置”,如下图所示:

在这里你可以找到改变终端外观的所有设置。

技巧 0:使用独立的终端配置文件进行定制

我建议你建立一个新的配置文件用于你的定制。为什么要这样做?因为这样一来,你的改变就不会影响到终端的主配置文件。假设你做了一些奇怪的改变,却想不起默认值?配置文件有助于分离你的定制。

如你所见,我有个单独的配置文件,用于截图和制作视频。

终端配置文件

你可以轻松地更改终端配置文件,并使用新的配置文件打开一个新的终端窗口。

更改终端配置文件

这就是我想首先提出的建议。现在,让我们看看这些调整。

技巧 1:使用深色/浅色终端主题

你可以改变系统主题,终端主题也会随之改变。除此之外,如果你不想改变系统主题。你也可以切换终端的深色主题或浅色主题,

一旦你进入“偏好设置”,你会注意到在“常规”选项中可以改变主题和其他设置。

技巧 2:改变字体和大小

选择你要自定义的配置文件。现在你可以选择自定义文本外观、字体大小、字体样式、间距、光标形状,还可以切换终端铃声。

对于字体,你只能改成你系统上可用的字体。如果你想要不同的字体,请先在你的 Linux 系统上下载并安装字体。

还有一点! 要使用等宽字体,否则字体可能会重叠,文字可能无法清晰阅读。如果你想要一些建议,可以选择 Share Tech Mono(开源)或 Larabiefont(不开源)。

在“文本”选项卡下,选择“自定义字体”,然后更改字体及其大小(如果需要)。

技巧 3:改变调色板和透明度

除了文字和间距,你还可以进入“颜色”选项,改变终端的文字和背景的颜色。你还可以调整透明度,让它看起来更酷。

正如你所注意到的那样,你可以从一组预先配置的选项中选择调色板,也可以自己调整。

如果你想和我一样启用透明,点击“使用透明背景”选项。

如果你想要和你的系统主题类似的颜色设置,你也可以选择使用系统主题的颜色。

技巧 4:调整 bash 提示符变量

通常当你启动终端时,无需任何修改你就会看到你的用户名和主机名(你的发行版名称)作为 bash 提示符。

例如,在我的例子中,它会是 “ankushdas@pop-os:~$”。然而,我把 主机名永久地改成了 “itsfoss”,所以现在看起来像这样:

要改变主机名,你可以键入:

hostname 定制名称

然而,这只适用于当前会话。因此,当你重新启动时,它将恢复到默认值。要永久地更改主机名,你需要输入:

sudo hostnamectl set-hostname 定制名称

同样,你也可以改变你的用户名,但它需要一些额外的配置,包括杀死所有与活动用户名相关联的当前进程,所以我们会跳过用它来改变终端的外观/感觉。

技巧 5:不推荐:改变 bash 提示符的字体和颜色(面向高级用户)

然而,你可以使用命令调整 bash 提示符的字体和颜色。

你需要利用 PS1 环境变量来控制提示符的显示内容。你可以在 手册页 中了解更多关于它的信息。

例如,当你键入:

echo $PS1

在我这里输出:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

我们需要关注的是该输出的第一部分:

\[\e]0;\u@\h: \w\a\]$

在这里,你需要知道以下几点:

  • \e 是一个特殊的字符,表示一个颜色序列的开始。
  • \u 表示用户名,后面可以跟着 @ 符号。
  • \h 表示系统的主机名。
  • \w 表示基本目录。
  • \a 表示活动目录。
  • $ 表示非 root 用户。

在你的情况下输出可能不一样,但变量是一样的,所以你需要根据你的输出来试验下面提到的命令。

在你这样做之前,请记住这些:

  • 文本格式代码:0 代表正常文本,1 代表粗体,3 代表斜体,4 代表下划线文本。
  • 背景色的颜色范围:40 - 47
  • 文本颜色的颜色范围:30 - 37

你只需要键入以下内容来改变颜色和字体:

PS1="\e[41;3;32m[\u@\h:\w\a\$]"

这是输入该命令后 bash 提示符的样子:

如果你注意到这个命令,就像上面提到的,\e 可以帮助我们分配一个颜色序列。

在上面的命令中,我先分配了一个背景色,然后是文字样式,接着是字体颜色,然后是 m。这里,m 表示颜色序列的结束。

所以,你要做的就是,调整这部分:

41;3;32

命令其余部分应该是不变的,你只需要分配不同的数字来改变背景色、文字样式和文字颜色。

要注意的是,这并没有特定的顺序,你可以先指定文字样式,再指定背景色,最后指定文字颜色,如 3;41;32,这里的命令就变成了:

PS1="\e[3;41;32m[\u@\h:\w\a\$]"

正如你所注意到的,无论顺序如何,颜色的定制都是一样的。所以,只要记住自定义的代码,并在你确定你想把它作为一个永久的变化之前,试试它。

上面我提到的命令会临时定制当前会话的 bash 提示符。如果你关闭了会话,你将失去这个自定义设置。

所以,要想把它变成一个永久的改变,你需要把它添加到 .bashrc 文件中(这是一个配置文件,每次加载会话时都会加载)。

简单键入如下命令来访问该文件:

nano ~/.bashrc

除非你明确知道你在做什么,否则不要改变任何东西。而且,为了可以恢复设置,你应该把 PS1 环境变量的备份(默认情况下复制粘贴其中的内容)保存到一个文本文件中。

所以,即使你需要默认的字体和颜色,你也可以再次编辑 .bashrc 文件并粘贴 PS1 环境变量。

附赠技巧:根据你的墙纸改变终端的调色板

如果你想改变终端的背景和文字颜色,但又不知道该选哪种颜色,你可以使用一个基于 Python 的工具 Pywal,它可以 根据你的壁纸 或你提供的图片自动改变终端的颜色。

如果你有兴趣使用这个工具,我之前已经详细介绍过了。

总结

当然,使用 GUI 定制很容易,同时也可以更好地控制你可以改变的东西。但是,需要知道命令也是必要的,万一你开始 使用 WSL 或者使用 SSH 访问远程服务器,无论如何都可以定制你的体验。

你是如何定制 Linux 终端的?在评论中与我们分享你的秘方。


via: https://itsfoss.com/customize-linux-terminal/

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

密码学家发表论文宣称破解了 RSA 加密系统

近日,德国密码学家施诺尔在预印本网站上传论文称自己破解了 RSA 加密系统。此事引起密码学界和量子密码界的广泛关注。RSA 加密算法是 1977 年提出的,其名字来源于三位作者的名字字头。这一算法利用大素数分解困难的特性,如果想要破解密码,需要花费很长时间进行大量运算。当前,许多对信息安全性要求较高的领域都大量采用 RSA 非对称加密算法,可以说是如今的信息技术的基石之一。

目前该论文尚未得到学术界的同行审议,是否真正破解了 RSA 还存疑。如果确实破解了 RSA 或提出了一个可行的方向,那对现在的信息技术所构建起来的信息社会的冲击是无疑是巨大的。

去年三分之二的勒索软件活动来自“勒索软件即服务”

事实证明,勒索软件攻击仍然非常有利可图,组织最严密的团伙每个受害者都能赚取数百万美元,因此许多网络犯罪分子都想兑现这种攻击,但没有能力自己编码和分发。这就是勒索软件即服务(RaaS)的作用,这些联盟计划为低级攻击者提供了分发和管理勒索软件活动的能力,而勒索软件背后的开发者则从每个勒索受害者的解密密钥报酬中获得分成。

对勒索软件作为服务的需求如此之大,以至于 2020 年期间出现了 15 个新的勒索软件联盟计划,包括 Thanos、Avaddon、SunCrypt 等。

最重要的不是在被勒索后付出赎金,而是在一开始就切断入侵的渠道和采用必要的安全措施。

微软为 Excel 增加了新的防病毒集成,以在运行时阻止 XLM 恶意宏脚本

自上世纪 90 年代以来,宏恶意软件一直是黑客的热门选择。微软多年来一直在使用其反恶意软件扫描接口(AMSI)来剔除宏恶意软件,但其成功地剔除用 VBA 编写的宏脚本的努力最终将攻击者推向了一种名为 XLM 的旧宏语言,该语言在 1992 年随 Excel 4.0 一起出现。虽然 XLM 在 1993 年被 VBA 取代,但一些客户仍在使用 XLM,因此 Excel 仍支持它。

现在,微软正在扩大其 AMSI 与 Office 365 的集成,包括在运行时扫描 Excel 4.0 XLM 宏,使 AMSI 也可以检测 XLM 宏。

没有脚本功能的 Office 软件没有灵魂,但是脚本其实是麻烦之源。我觉得微软内置对恶意脚本的检测是非常必要的。

对于不是工程师的人来说也有很多技术工作可以做。本文作为本系列的第二篇,就具体阐述这些工作。

 title=

本系列的第一篇文章 中,我解释了技术行业如何将人员和角色划分为“技术”或“非技术”类别,以及与此相关的问题。科技行业使得那些对科技感兴趣但不懂编程的人很难找到适合自己的角色。

如果你对技术或开源感兴趣,但对编程不感兴趣,这也有一些工作适合你。科技公司的任何一个职位都可能需要一个精通科技但不一定会写代码的人。但是,你确实需要了解术语并理解产品。

我最近注意到,在诸如技术客户经理、技术产品经理、技术社区经理等职位头衔上增加了“技术”一词。这反映了几年前的趋势,即在头衔上加上“工程师”一词,以表示该职位的技术需要。过了一段时间,每个人的头衔中都有“工程师”这个词,这样的分类就失去了一些吸引力。

当我坐下来写这些文章时,Tim Banks 的这条推特出现在我的通知栏上:

已经将职业生涯规划为技术行业的非开发人员(除了信息安全、数据科学/分析师、基础设施工程师等以外的人员)的女性,你希望知道的事情有哪些,有价值的资源有哪些,或者对希望做出类似改变的人有哪些建议?

—— Tim Banks is a buttery biscuit (@elchefe) December 15,2020

这遵循了我第一篇文章中的建议:Tim 并不是简单地询问“非技术角色”;他提供了更重要的详细描述。在 Twitter 这样的媒体上,每一个字符都很重要,这些额外的字符会产生不同的效果。这些是技术角色。如果为了节约笔墨,而简单的称呼他们为“非技术人员”,会改变你的原意,产生不好的影响。

以下是需要技术知识的非工程类角色的示例。

技术作者

技术作者的工作 是在两方或多方之间传递事实信息。传统上,技术作者提供有关如何使用技术产品的说明或文档。最近,我看到术语“技术作者”指的是写其他形式内容的人。科技公司希望一个人为他们的开发者读者写博客文章,而这种技巧不同于文案或内容营销。

需要的技术技能:

  • 写作
  • 特定技术或产品的用户知识或经验
  • 快速跟上新产品或新特性的速度的能力
  • 在各种环境中创作的技能

适合人群:

  • 可以清楚地提供分步说明
  • 享受合作
  • 对活跃的声音和音乐有热情
  • 喜欢描述事物和解释原理

产品经理

产品经理 负责领导产品战略。职责可能包括收集客户需求并确定其优先级,撰写业务案例,以及培训销售人员。产品经理跨职能工作,利用创造性和技术技能的结合,成功地推出产品。产品经理需要深厚的产品专业知识。

所需技术技能:

  • 掌握产品知识,并且会配置或运行演示模型
  • 与产品相关的技术生态系统知识
  • 分析和研究技能

适合以下人群:

  • 享受制定战略和规划下一步的工作
  • 在不同的人的需求中可以看到一条共同的线索
  • 能够清楚地表达业务需求和要求
  • 喜欢描述原因

数据分析师

数据分析师负责收集和解释数据,以帮助推动业务决策,如是否进入新市场、瞄准哪些客户或在何处投资。这个角色需要知道如何使用所有可用的潜在数据来做出决策。我们常常希望把事情简单化,而数据分析往往过于简单化。获取正确的信息并不像编写查询 select all limit 10 来获取前 10 行那么简单。你需要知道要加入哪些表。你需要知道如何分类。你需要知道是否需要在运行查询之前或之后以某种方式清理数据。

所需技术技能:

  • 了解 SQL、Python 和 R
  • 能够看到和提取数据中的样本
  • 了解事物如何端到端运行
  • 批判性思维
  • 机器学习

适合以下人群:

  • 享受解决问题的乐趣
  • 渴望学习和提出问题

开发者关系

开发者关系 是一门相对较新的技术学科。它包括 开发者代言人 developer advocate 开发者传道者 developer evangelist 开发者营销 developer marketing 等角色。这些角色要求你与开发人员沟通,与他们建立关系,并帮助他们提高工作效率。你向公司倡导开发者的需求,并向开发者代表公司。开发者关系可以包括撰写文章、创建教程、录制播客、在会议上发言以及创建集成和演示。有人说你需要做过开发才能进入开发者关系。我没有走那条路,我知道很多人没有。

所需技术技能:

这些将高度依赖于公司和具体角色。你需要部分技能(不是全部)取决于你自己。

  • 了解与产品相关的技术概念
  • 写作
  • 教程和播客的视频和音频编辑
  • 说话

适合以下人群:

  • 有同情心,想要教导和授权他人
  • 可以为他人辩护
  • 你很有创意

无限的可能性

这并不是一个完整的清单,并没有列出技术领域中所有的非工程类角色,而是一些不喜欢每天编写代码的人可以尝试的工作。如果你对科技职业感兴趣,看看你的技能和什么角色最适合。可能性是无穷的。为了帮助你完成旅程,在本系列的最后一篇文章中,我将与这些角色的人分享一些建议。


via: https://opensource.com/article/21/2/non-engineering-jobs-tech

作者:Dawn Parzych 选题:lujun9972 译者:Chao-zhi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出