
为什么系统管理员应该为他们的代码授权开源
我所知的回馈开源社区的最佳方式之一,这个社区为每个人提供了令人难以置信的程序,就是使用适当的许可证将程序和脚本开源。
介绍
作为一名 Linux 系统管理员,我编写相当多的代码。
这让你感到惊讶吗?嗯,我努力成为“懒惰”的系统管理员,我这样做部分是通过自动化来减少重复性任务的数量。我的大多数自动化都始于小型命令行程序。我使用集中存储的可执行脚本来自动化任务。这使我能够通过根据需要重新运行脚本来有效地管理我权限下的任何 Linux 主机。
共享未授权代码的问题
我也喜欢分享我的代码。开源的全部意义在于分享代码以帮助他人。为您解决问题的代码可能是面临类似问题的系统管理员同行的救星。但是存在法律障碍,即使是写得很好的代码也可能由于法律问题而无法按预期使用。
虽然保留许可证副本有助于公司了解其权利和义务,但这可能会带来挑战。法律部门通常要求这样做,但这可能会阻碍代码共享。未授权的软件会造成法律灰色地带。在没有明确概述使用权的许可证的情况下,公司和个人会犹豫是否使用该代码,担心潜在的法律问题。这可能会阻止有价值的软件充分发挥其潜力。
我为什么为我的代码授权
我所知的回馈开源社区的最佳方式之一,这个社区为每个人提供了令人难以置信的程序,例如 GNU 实用程序、Linux 内核、LibreOffice、WordPress 和数千个其他程序,就是使用适当的许可证将程序和脚本开源。
编写您认为应该开源的代码不足以使其成为开源——这需要明确的许可证。许多系统管理员,包括我自己,编写了大量有用的脚本。但是,我们多久考虑正式授权它们用于开源用途呢?
使您的代码开源不是自动的。您需要明确声明它是开源的并选择许可证。这个关键步骤消除了任何混淆,并允许其他人自由地研究、使用、修改和共享您的作品。没有许可证,您的代码本质上仍然是专有的,阻碍了社区从您的贡献中受益。
您应该包含 GPLv2(或您其他首选的)许可证标头声明作为命令行选项,该选项将许可证标头打印到终端。在分发代码时,我还建议在代码中包含整个许可证的文本副本(这是某些许可证的要求)。
几年前,我读到一篇有趣的文章,《源代码即许可证》,它有助于解释这背后的原因。
令人惊讶的是,尽管我读过所有关于系统管理的书籍和课程,但没有一本提到为内部任务编写的代码授权的重要性。考虑到系统管理员编写脚本和工具的频率,这似乎是一个重大的疏忽。
所有这些来源都完全忽略了系统管理员也编写代码的事实。即使在我参加的关于许可的会议上,重点也放在应用程序代码、内核代码,甚至是 GNU 类型的实用程序上。没有任何演示文稿暗示您应该以任何方式考虑为其授权。
也许您有不同的经历,但这是我的经历。至少,这让我感到沮丧——最多是让我生气。当您忽略为代码授权时,您会贬低您的代码价值。许多系统管理员甚至没有考虑过许可,但如果您希望您的代码可供整个社区使用,这非常重要。这既不是为了荣誉也不是为了金钱。这是为了确保您的代码现在和将来始终以“自由和开源”的最佳意义提供给其他人。
《Unix 编程艺术》的作者 Eric Raymond 写道,在计算机编程的早期,尤其是在 Unix 的早期,共享代码是一种生活方式。最初,这只是重用现有代码。随着 Linux 和开源许可的出现,这变得容易得多。它满足了系统管理员能够合法共享和重用开源代码的需求。
Raymond 表示:“软件开发人员希望他们的代码是透明的。此外,他们不希望在更换工作时失去他们的工具包和专业知识。他们厌倦了成为受害者,厌倦了因钝器和知识产权围栏而受挫,并且不得不反复重新发明轮子。” 这一说法也适用于系统管理员——他们实际上也是软件开发人员。
我如何为我的代码授权
我提到添加一个选项,将 GPL(或其他)许可证标头作为命令行选项打印出来。
这是我如何做的
#############################################
# Print the GPL license header #
#############################################
gpl()
{
echo
echo "############################################################"
echo "# Copyright (C) 2023 David Both #"
echo "# http://www.both.org #"
echo "# #"
echo "# This program is free software; you can redistribute it #"
echo "# and/or modify it under the terms of the #"
echo "# GNU General Public License as published by the #"
echo "# Free Software Foundation; either version 2 of the #"
echo "# License, or (at your option) any later version. #"
echo "# #"
echo "# This program is distributed in the hope that it will be #"
echo "# useful, but WITHOUT ANY WARRANTY; without even the #"
echo "# implied warranty of MERCHANTABILITY or FITNESS FOR A #"
echo "# PARTICULAR PURPOSE. See the GNU General Public License #"
echo "# for more details. #"
echo "# #"
echo "# You should have received a copy of the GNU General #"
echo "# Public License along with this program; if not, write #"
echo "# to the Free Software Foundation, Inc., 59 Temple Place, #"
echo "# Ste 330, Boston, MA 02111-1307 USA #"
echo "############################################################"
echo
} # End of gpl()
end
这就是许可证,作为函数包含在内。您可以向代码添加一个选项。我喜欢按字母顺序放置新的 case 部分,以便在执行维护时更容易找到它们。这是 GPL,所以我选择 g 作为短选项
#########################################
# Process the input options #
#########################################
# Get the options
while getopts ":gh" option; do
case $option in
g) # display the GPL header
gpl
exit;;
h) # Help function
Help
exit;;
\?) # incorrect option
echo "Error: Invalid option."
exit;;
esac
done
end
这两段代码就是您需要添加到程序中以添加合法且可执行的许可证的全部内容。
最后的想法
我总是为我的所有代码授权。我曾经在 OLF(Open Libre Free,以前称为 Ohio Linux Fest)上做过关于 Bash 的演讲。我没有使用 LibreOffice Impress 进行演示,而是使用 Bash 程序完成了整个演示。毕竟,这是一个关于 Bash 的演示,为什么不把它做成一个 Bash 程序呢?
我在那个 Bash 程序中包含了我的许可证代码。这样,每个遇到我的程序副本的人都知道它已根据 GPLv3 正式授权,并且他们可以根据该许可证的条款使用和修改它。我的代码就是许可证。
这是我关于 Bash 系列的最后一篇文章——如果您学到了一些东西,请考虑通过将您的代码提供给所有人来回馈。