作为一名 Linux 系统管理员,我编写了相当多的代码。
这让你感到惊讶吗?好吧,我力求成为“懒惰”的系统管理员,我这样做部分是通过自动化来减少我需要做的重复性任务的数量。我的大部分自动化最初都是一些小的命令行程序。我将这些程序存储在可执行脚本中,以便在任何时候在我负责的任何 Linux 主机上重复使用。
共享未许可代码的问题
我也喜欢分享我的代码。我认为,如果我的代码帮助我解决了问题,它也可以帮助其他系统管理员解决相同或类似的问题。毕竟,这就是开源的本质——代码的共享。虽然代码共享是一件好事,但法律问题可能会阻止完美的代码被开发者按预期使用。
主要问题是许多公司都有法律部门,要求他们保留许可证副本。这使得他们很容易理解自己的权利和义务。没有任何附加许可证的软件会成为法律责任。这是因为没有依据来确定代码是否可以合法使用。这可能会阻止许多公司和个人使用完美的代码。
我为什么许可我的代码
我所知的回馈开源社区的最佳方式之一,这个社区为每个人提供了令人难以置信的程序,例如 GNU Utilities、Linux 内核、LibreOffice、WordPress 以及成千上万个其他程序,就是使用适当的许可证将程序和脚本开源。
仅仅因为你编写了一个程序,相信开源,并且同意程序应该是开源代码,并不能使其成为开源。作为一名系统管理员,我确实编写了很多代码,但是你们有多少人曾经考虑过许可自己的代码?
你必须做出选择,明确声明你的代码是开源的,并决定你希望它在哪个许可证下分发。没有这个关键步骤,你创建的代码在功能上就是专有的。这意味着社区无法安全地利用你的工作。
你应该包含 GPLv2(或你首选的其他)许可证头语句,作为将许可证头打印到终端的命令行选项。在分发代码时,我还建议你包含整个许可证的文本副本以及代码(这是某些许可证的要求。)
几年前,我读到一篇有趣的文章,源代码就是许可证,它有助于解释这背后的原因。
我发现非常有趣的是,在我读过的所有书籍和参加过的所有课程中,没有一次有人告诉我为我在系统管理员任务中编写的代码包含许可证。所有这些来源都完全忽略了系统管理员也编写代码的事实。即使在我参加过的关于许可的会议上,重点也是应用程序代码、内核代码,甚至 GNU 类型的实用程序。没有任何演示文稿暗示你应该以任何方式考虑许可它。
也许你经历过不同的情况,但这就是我的情况。至少,这让我感到沮丧——最多让我生气。当你忽略许可你的代码时,你会贬低你的代码价值。许多系统管理员甚至没有考虑过许可,但如果你希望你的代码对整个社区可用,这很重要。这既不是为了荣誉也不是为了金钱。这是为了确保你的代码现在和将来始终以“自由和开源”的最佳意义提供给他人。
Eric Raymond,2003 年出版的《Unix 编程艺术》的作者写道,在计算机编程的早期,尤其是在 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 ":ghc" option; do
case $option in
c) # Check option
Check=1;;
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 正确许可,并且他们可以在该许可证的条款下使用和修改它。我的代码就是许可证。
评论已关闭。