脚本从定义上来说是“开源”的吗?

前几天,我对一个朋友的《魔兽世界》插件脚本进行了调整。他很惊讶可以编辑这些插件,因为它们是“开源”的。(《魔兽世界》插件是用 Lua 脚本语言编写的。)我发现自己想要说:“当然可以——所有脚本都是‘开源’的。”

这是真的吗?当然,有些脚本可以编译成字节码,但几乎所有脚本都是解释执行的吗?也就是说,解释脚本的设备需要“源代码”,这是定义上的问题吗?

原文链接 https://stackoverflow.com/questions/426932

点赞
stackoverflow用户4323
stackoverflow用户4323

你可以编译 Lua 和其他脚本语言并以各种方式进行隐藏。相对于其他语言,源代码默认开放的情况只是更为普遍,而不是更为必要的。

2009-01-09 03:07:59
stackoverflow用户20734
stackoverflow用户20734

开源的定义

开源指的是许可证。脚本可以有任何作者(或版权持有者,例如雇主)想要的许可证。因此,答案是“不是”。

通常情况下,脚本以编写时的形式分发 - 没有编译格式。因此,您可以查看源代码。这并不意味着它们是开源的。

2009-01-09 03:09:07
stackoverflow用户22704
stackoverflow用户22704

“开源”不仅仅意味着你拥有源代码,它也用于描述你是否有法律权利在带或不带修改的情况下重新分发代码。

根据版权和许可证,许多脚本不是开源的。

2009-01-09 03:09:09
stackoverflow用户392
stackoverflow用户392

这取决于你如何解释“开源”。

当然,您可以获得源代码,但通常这不是“开源”的准确含义。通常“开放源代码”是指许可证。拥有“开源”的东西意味着您可以自由修改源代码以任何目的,包括在许多情况下重新分发它。

仅有源代码并不能使其成为一般软件意义上的“开源”。如果脚本受版权保护,则从技术上讲它是“封闭”的,除非明确给出开放源代码许可证的情况。您可以进行修改,但如果未经作者许可重新分发,则违反了他们的隐含(或明确注册的)版权。

2009-01-09 03:09:11
stackoverflow用户2509
stackoverflow用户2509

要为解释器分发程序,您必须发送源代码(尽管不一定是可理解的源代码)。这并不意味着它自动符合“开放”或“免费”的定义方式,如这些术语通常所指的。

2009-01-09 03:10:10
stackoverflow用户41661
stackoverflow用户41661

许多人指出,仅仅因为你可以访问源代码并不意味着你可以任意处理它。

你问道:

几乎所有脚本不都是解释执行的吗?也就是说,解释脚本的设备需要“源代码”,这是定义吗?

不是的。即使在解释器中,在被解释之前,源代码会经过几次转换。最终被解释的形式通常是基于堆栈或寄存器的虚拟机的指令序列;这些指令通常被称为“字节码”。解释内部的 也是相对高效的。专门用于教学目的的解释器可能会使用更低效的方案。

某些实现允许您将内部形式写入磁盘,然后可以从磁盘上重新读取并解释它。通常的优点是

  • 程序的加载和运行速度更快,因为在将内部形式写入后,首次处理阶段只执行一次,然后一遍遍地重用。

  • 内部形式可以保护源代码不被看到。

主要的劣势是一般情况下内部形式通常不如源代码具有可移植性,可能是因为字节顺序或字长大小的差异。

在 Lua 特定的情况下, luac 编译器将字节码写入磁盘。它很少被使用,因为字节码是不可移植的,而且编译器已经非常快了。在“魔兽世界”的特定情况下,他们实际上鼓励人们使用 Lua 修改界面并自定义体验;他们希望每个人都分享代码,因此保持其开源。魔兽世界有超过 1000 万的用户,至少有 5000 人贡献了代码。这意味着用户群体的半个百分点贡献了一些代码,这让我对编程作为一个职业的未来感到非常乐观。

2009-01-09 04:58:42
stackoverflow用户3542
stackoverflow用户3542

编号

“开源”并不等同于能够查看源代码;开源许可证是关于从源代码得出作品的合法权利

如果你获取了别人的作品,修改并重新分发它,而没有得到他们的明确同意,那么你就侵犯了他们的版权,且会违法

2009-01-12 22:46:00
stackoverflow用户417292
stackoverflow用户417292

我似乎记得在游戏条款和条件中读到过需要插件以开源方式进行许可证的内容,但我现在似乎找不到了,所以我可能是在想象。然而,在所有实际情况下,它们都是这样的。

2009-01-16 10:19:43