“CLI 书签好友”
项目描述
twbm:通过命令行 (CLI) 进行 URI 管理和 WEB 浏览
命令行的通用 URI 管理器。
特征:
- 管理 sqlite 数据库中的 URI
- 知道如何打开 HTTP URL、目录、文件(例如 Office、图像、....)
- 可以通过协议前缀将 URI 作为 shell 命令执行:'shell::' URI-示例:
shell::vim +/"## SqlAlchemy" $HOME/document.md
- 跨 URI 的全文搜索
- URI 分类的标签
- 添加新书签时检查标签的一致性
- 管道搜索结果下游集体行动,例如更新,打开,...
- 以非交互方式打开一组 URI,例如同时打开所有关于 Poker 的 URI
灵感来自https://github.com/jarun/buku。如果您对使用buku感到满意,请务必坚持下去。这是经过实战考验的。
twbm 100% 兼容 buku。可以在twbm和buku之间来回切换而不会丢失数据。
要利用twbm
的强大功能,请使用全文查询语法(参见:https ://www.sqlite.org/fts5.html第 3 章)。
用法
提供了两个互补的命令:
- twbm : 带有 FTS 的 CLI 工具,用于通用 URI 管理
- twbuku : 100% buku 小改进和增强数据库的使用
获得帮助:twbm --help
例子
# FTS examples (https://www.sqlite.org/fts5.htm)
twbm search 'security "single-page"'
twbm search '"https://securit" *'
twbm search '^security'
twbm search 'postgres OR sqlite'
twbm search 'security NOT keycloak'
# FTS combined with tag filtering
twbm search -t tag1,tag2 -n notag1 <searchquery>
# Match exact taglist
twbm search -e tag1,tag2
# Open all matching sites non-interactively
twbm search poker --np | twbm open
# Search -> select interactively -> pipe bookmark id downstream for processing
twbm search xxxxx | twbm update -t x
# Search by any tag and sort by bookmark age ascending
twbm search -T tag1,tag2 -O
# Adding URI to local files
twbm add /home/user/presentation.pptx tag1,tag2 --title 'My super Presentation'
twmb add '$HOME/vimwiki/e4m/poker-points.png' --title 'Poker Points'
# Adding shell commands as URI
twbm add "shell::vim +/'# SqlAlchemy' sql.md" shell,sql,doc --title 'sqlalchemy snippets'
标签必须用逗号分隔,不能有空格。添加不以“http”开头的通用 URI 时,可以忽略 cli 消息“格式错误的 URL”。
当然,可以选择多个书签以在浏览器中打开:
选择后程序结束并返回命令行提示符。
安装
pipx twbm
数据库架构升级:
- 升级现有的 buku-db:
twbm-upgrade-db.sh buku.db twbm.db
. - 降级 twbm-db:
twbm-downgrade-db.sh twbm.db buku.db
.
所有事务都不会影响现有数据库。
测试配置:
- sqlite 3.36.0(需要在 macOS 上更新)
- macOS 10.15.7
配置
sqlite数据库的位置:
# aliases which I use
alias b="twbuku --db $HOME/bm.db -n 1000 --deep" # using patched original buku
alias bb="TWBM_DB_URL=sqlite:////$HOME/bm.db twbm search" # using extended CLI tool
alias bbb="TWBM_DB_URL=sqlite:////$HOME/bm.db twbm"
建筑学
twbm在后台使用了一些buku
功能,但通常在以下基础上重新构建:
这应该使得以面向对象的方式扩展和添加功能变得容易。
发展
补丁布库
- 下载
buku
并比较buku.py
- 更新
buku.py
:(# tw: add title tagging
自定义:搜索# tw
) - 问题:排除
buku.py
在black
rm buku
wget https://raw.githubusercontent.com/jarun/buku/master/buku .
black buku
diff buku.py buku
从源本地安装
- 使用 pipx 安装 twbm 用于本地开发:
pipx install ~/dev/py/twbm
,通过make install
- 卸载:
pipx uninstall twbm
#问题:不是路径!!!!
测试
make test
管道
Pycharm 运行配置会干扰管道。只能在 CLI 上进行测试/运行。这会影响以下命令:open, update
测试数据库
dev/py/twbm/sql/fts.db vimwiki/buku/bm.db
去做
- github 操作 sqlite FTS5 模块无法正常工作,因此构建失败
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
版权所有 (C) 2007 Free Software Foundation, Inc. http://fsf.org/ 每个人都可以复制和分发本许可文档的逐字副本,但不允许对其进行更改。
Preamble
GNU 通用公共许可证是软件和其他类型作品的免费、copyleft 许可证。
大多数软件和其他实际作品的许可旨在剥夺您分享和更改作品的自由。相比之下,GNU 通用公共许可证旨在保证您共享和更改程序的所有版本的自由——以确保它对所有用户都是免费软件。我们,自由软件基金会,对我们的大部分软件使用 GNU 通用公共许可证;它也适用于其作者以这种方式发布的任何其他作品。您也可以将其应用到您的程序中。
当我们谈到自由软件时,我们指的是自由,而不是价格。我们的通用公共许可证旨在确保您可以自由分发免费软件的副本(如果您愿意,还可以收取费用),您可以接收源代码或可以根据需要获取它,您可以更改软件或者在新的免费程序中使用它的一部分,并且你知道你可以做这些事情。
为了保护您的权利,我们需要防止他人否认您的这些权利或要求您放弃这些权利。因此,如果您分发软件的副本或修改它,您有一定的责任:尊重他人自由的责任。
例如,如果您分发此类程序的副本,无论是免费还是收费,您都必须将您获得的相同自由传递给接收者。您必须确保他们也收到或可以获得源代码。您必须向他们展示这些条款,以便他们了解自己的权利。
使用 GNU GPL 的开发人员通过两个步骤保护您的权利:(1) 声明软件的版权,以及 (2) 向您提供本许可,授予您复制、分发和/或修改它的合法许可。
为了保护开发者和作者,GPL 明确说明对这个免费软件没有任何保证。为了用户和作者的利益,GPL 要求将修改后的版本标记为已更改,这样他们的问题就不会错误地归咎于以前版本的作者。
一些设备旨在拒绝用户安装或运行其中软件的修改版本,尽管制造商可以这样做。这从根本上与保护用户更改软件自由的目的不相容。这种滥用的系统模式发生在供个人使用的产品领域,而这恰恰是最不能接受的地方。因此,我们设计了这个版本的 GPL 来禁止这些产品的做法。如果此类问题在其他领域大量出现,我们随时准备在 GPL 的未来版本中将此条款扩展到这些领域,以保护用户的自由。
最后,每个程序都不断受到软件专利的威胁。各州不应允许专利限制通用计算机上软件的开发和使用,但在那些允许的情况下,我们希望避免应用到自由程序的专利可能使其有效专有的特殊危险。为了防止这种情况,GPL 保证不能使用专利来使程序成为非免费的。
复制、分发和修改的精确条款和条件如下。
TERMS AND CONDITIONS
- 定义。
“本许可证”是指 GNU 通用公共许可证的第 3 版。
“版权”也指适用于其他类型作品的类似版权的法律,例如半导体掩模。
“本程序”是指根据本许可获得许可的任何受版权保护的作品。每个被许可人都被称为“您”。“被许可人”和“接受者”可以是个人或组织。
“修改”作品意味着以需要版权许可的方式复制或改编作品的全部或部分,而不是制作精确的副本。由此产生的作品被称为早期作品的“修改版”或“基于”早期作品的作品。
“涵盖的作品”是指未经修改的程序或基于该程序的作品。
“传播”作品意味着在未经许可的情况下对作品进行任何使您根据适用的版权法直接或间接承担侵权责任的事情,但在计算机上执行或修改私人副本除外。传播包括复制、分发(修改或不修改)、向公众提供以及在一些国家还包括其他活动。
“传播”作品是指使其他方能够制作或接收复制品的任何形式的传播。仅仅通过计算机网络与用户交互,没有副本的传输,不是传达。
交互式用户界面显示“适当的法律声明”,其中包括一个方便且显眼的功能,即 (1) 显示适当的版权声明,以及 (2) 告诉用户该作品没有任何保证(除了在提供保证的范围内),被许可人可以根据本许可传播作品,以及如何查看本许可的副本。如果界面呈现用户命令或选项的列表,例如菜单,则列表中的突出项目符合此标准。
- 源代码。
作品的“源代码”是指对作品进行修改的首选形式。“目标代码”是指任何非源代码形式的作品。
“标准接口”是指一种接口,它要么是由公认的标准机构定义的官方标准,要么是为特定编程语言指定的接口,在使用该语言的开发人员中广泛使用的接口。
可执行作品的“系统库”包括除整个作品之外的任何内容,(a) 包含在打包主要组件的正常形式中,但不属于该主要组件的一部分,以及 (b)仅用于启用与该主要组件的工作,或实现标准接口,其实现以源代码形式向公众提供。在此上下文中,“主要组件”是指运行可执行工作的特定操作系统(如果有)的主要基本组件(内核、窗口系统等),或用于生成该工作的编译器,或用于运行它的目标代码解释器。
目标代码形式的作品的“对应源代码”是指生成、安装和(对于可执行作品)运行目标代码和修改作品所需的所有源代码,包括控制这些活动的脚本。但是,它不包括作品的系统库,或通用工具或普遍可用的免费程序,这些程序未经修改用于执行这些活动,但不属于作品的一部分。例如,对应源包括与工作源文件相关联的接口定义文件,以及共享库和动态链接子程序的源代码,这些子程序是专门设计为需要的,例如通过这些子程序之间的密切数据通信或控制流和工作的其他部分。
对应源不需要包括用户可以从对应源的其他部分自动重新生成的任何内容。
源代码形式的作品的对应来源是相同的作品。
- 基本权限。
根据本许可授予的所有权利均在程序的版权期限内授予,并且在满足所述条件的情况下是不可撤销的。本许可明确确认您无限制地允许运行未经修改的程序。仅当输出(鉴于其内容)构成涵盖作品时,本许可才涵盖运行涵盖作品的输出。本许可承认版权法规定的您的合理使用权或其他同等权利。
只要您的许可仍然有效,您就可以无条件地制作、运行和传播您未传达的涵盖作品。您可以将涵盖的作品传送给其他人,其唯一目的是让他们专门为您进行修改,或为您提供运行这些作品的设施,前提是您在传送您无法控制的所有材料时遵守本许可的条款版权。因此,为您制作或运行涵盖作品的人必须在您的指导和控制下完全代表您这样做,其条款禁止他们在与您的关系之外复制您的受版权保护的材料。
仅在以下规定的条件下才允许在任何其他情况下进行输送。不允许分许可;第 10 条使其没有必要。
- 保护用户的合法权益免受反规避法的侵害。
根据任何适用法律履行 1996 年 12 月 20 日通过的 WIPO 版权条约第 11 条规定的义务,或禁止或限制规避此类措施的类似法律,任何涵盖的作品均不应被视为有效技术措施的一部分。
当您传送涵盖的作品时,您放弃任何禁止规避技术措施的法律权力,前提是此类规避是通过对涵盖的作品行使本许可下的权利来实现的,并且您否认任何限制操作或修改的意图作品作为对作品的用户执行您或第三方禁止规避技术措施的合法权利的一种手段。
- 传送逐字副本。
您可以在收到程序源代码时通过任何媒体逐字传送该程序源代码的副本,前提是您在每个副本上显着且适当地发布适当的版权声明;保持所有声明本许可证和根据第 7 节添加的任何非许可条款适用于代码的完整通知;保持所有关于不提供任何保证的通知;并将本许可的副本与程序一起提供给所有接收者。
您可以对您传送的每份副本收取任何费用或不收取任何费用,并且您可以付费提供支持或保修保护。
- 传达修改后的源版本。
您可以根据第 4 条的条款以源代码的形式传送基于本程序的作品,或从本程序产生的修改,前提是您还满足所有这些条件:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
涵盖作品与其他单独和独立的作品的汇编,这些作品在本质上不是涵盖作品的扩展,并且未与该作品结合以形成更大的程序,在存储或分发的体积中或之上如果汇编及其由此产生的版权未被用于限制汇编用户的访问或合法权利超出个人作品允许的范围,则媒体称为“聚合”。在聚合中包含涵盖的作品不会导致本许可适用于聚合的其他部分。
- 传送非来源表格。
您可以根据第 4 节和第 5 节的条款以目标代码形式传送涵盖的作品,前提是您还可以通过以下方式之一根据本许可的条款传送机器可读的对应源代码:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
目标代码的可分离部分,其源代码从作为系统库的相应源中排除,不需要包含在传送目标代码工作中。
“用户产品”是(1)“消费品”,指通常用于个人、家庭或家庭目的的任何有形个人财产,或(2)任何设计或出售用于并入住宅的物品。在确定产品是否为消费品时,应解决有疑问的情况以支持承保。对于特定用户收到的特定产品,“通常使用”是指该类别产品的典型或普遍使用,无论特定用户的状态或特定用户实际使用、期望或预计使用,产品。产品是消费产品,无论该产品是否具有实质性的商业、工业或非消费用途,
用户产品的“安装信息”是指从相应源的修改版本安装和执行该用户产品中涵盖作品的修改版本所需的任何方法、程序、授权密钥或其他信息。该信息必须足以确保在任何情况下都不会仅仅因为进行了修改而阻止或干扰修改后的目标代码的持续运行。
如果您根据本节在用户产品中或与用户产品一起或专门用于在用户产品中传送目标代码作品,并且该传送是作为交易的一部分发生的,其中用户产品的占有和使用权转移给永久或固定期限的接收方(无论交易的特征如何),根据本节传达的相应来源必须附有安装信息。但如果您或任何第三方均不保留在用户产品上安装修改后的目标代码的能力(例如,该作品已安装在 ROM 中),则此要求不适用。
提供安装信息的要求不包括继续为接受者修改或安装的作品或已修改或安装的用户产品提供支持服务、保修或更新的要求。当修改本身对网络的运行产生重大不利影响或违反网络通信的规则和协议时,可能会拒绝访问网络。
根据本节所传达的相应源和提供的安装信息必须采用公开记录的格式(并且以源代码形式向公众提供实现),并且必须不需要特殊的密码或密钥来解压、阅读或复制。
- 附加条款。
“附加许可”是通过对本许可的一个或多个条件作出例外来补充本许可条款的条款。适用于整个程序的附加权限应被视为包含在本许可中,只要它们在适用法律下有效。如果附加许可仅适用于本程序的一部分,则该部分可以根据这些许可单独使用,但整个程序仍受本许可的约束,而与附加许可无关。
当您传送涵盖作品的副本时,您可以选择从该副本或其任何部分删除任何附加权限。(在某些情况下,当您修改作品时,可能会写入额外的权限以要求它们自己删除。)您可以对您添加到涵盖作品中的材料设置额外的权限,您拥有或可以给予适当的版权许可。
尽管本许可证有任何其他规定,对于您添加到涵盖作品中的材料,您可以(如果该材料的版权所有者授权)用以下条款补充本许可证的条款:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
所有其他非许可性附加条款均被视为第 10 节含义内的“进一步限制”。如果您收到的程序或其任何部分包含声明它受本许可约束的通知以及以下条款是进一步的限制,您可以删除该术语。如果许可文件包含进一步的限制,但允许根据本许可进行再许可或转让,则您可以添加受该许可文件条款约束的涵盖工作材料,前提是进一步的限制不会在此类再许可或转让中继续存在。
如果您根据本节将条款添加到涵盖的作品中,您必须在相关源文件中放置适用于这些文件的附加条款的声明,或说明在哪里可以找到适用条款的通知。
附加条款,无论是许可的还是非许可的,都可以以单独书面许可的形式说明,或作为例外说明;以上要求均适用。
- 终止。
除非本许可明确规定,否则您不得传播或修改涵盖的作品。任何以其他方式传播或修改它的尝试都是无效的,并且将自动终止您在本许可下的权利(包括根据第 11 节第三段授予的任何专利许可)。
但是,如果您停止所有违反本许可的行为,则 (a) 临时恢复您从特定版权持有人处获得的许可,除非且直到版权持有人明确并最终终止您的许可,以及 (b) 如果版权持有人未终止许可,则永久恢复在停止后 60 天之前通过某种合理的方式通知您违规行为。
此外,如果版权所有者以某种合理的方式通知您违规行为,您从特定版权所有者那里获得的许可将永久恢复,这是您第一次收到该版权所有者关于违反本许可(任何作品)的通知,并且您在收到通知后的 30 天内纠正违规行为。
终止您在本节项下的权利不会终止根据本许可从您那里收到副本或权利的各方的许可。如果您的权利已被终止且未永久恢复,则您没有资格根据第 10 条获得相同材料的新许可。
- 拥有副本不需要接受。
您无需接受本许可即可接收或运行本程序的副本。仅由于使用对等传输接收副本而发生的涵盖作品的辅助传播同样不需要接受。但是,除本许可外,没有任何其他权利授予您传播或修改任何涵盖作品的权限。如果您不接受本许可,这些行为将侵犯版权。因此,通过修改或传播涵盖的作品,您表示您接受本许可这样做。
- 下游接收者的自动许可。
每次您传送涵盖的作品时,接收者都会自动从原始许可人处获得许可,以根据本许可运行、修改和传播该作品。您不负责强制第三方遵守本许可证。
“实体交易”是指转移组织控制权或一个组织的几乎所有资产、或细分组织或合并组织的交易。如果涵盖作品的传播是由实体交易引起的,则收到该作品副本的该交易的每一方也将获得该方的利益前任根据前一段已经或可以给予的任何许可,以及占有权如果前任拥有或可以通过合理努力获得该作品的相应来源。
您不得对根据本许可授予或确认的权利的行使施加任何进一步的限制。例如,您不得为行使根据本许可授予的权利收取许可费、特许权使用费或其他费用,并且您不得提起诉讼(包括诉讼中的交叉索赔或反诉),指控任何专利权利要求受到侵犯通过制作、使用、销售、许诺销售或进口本程序或其任何部分。
- 专利。
“贡献者”是指根据本许可授权使用本程序或本程序所基于的作品的版权持有人。这样获得许可的作品被称为贡献者的“贡献者版本”。
贡献者的“基本专利权利要求”是指由贡献者拥有或控制的所有专利权利要求,无论是已经获得的还是以后获得的,这些专利权利要求会被本许可证允许的某种方式侵犯,制造、使用或销售其贡献者版本,但不包括仅因进一步修改贡献者版本而被侵权的索赔。就本定义而言,“控制”包括以符合本许可要求的方式授予专利分许可的权利。
每个贡献者根据贡献者的基本专利权利要求授予您非独家、全球、免版税的专利许可,以制作、使用、销售、要约销售、进口和以其他方式运行、修改和传播其贡献者版本的内容。
在以下三段中,“专利许可”是任何明确的协议或承诺,无论其名称如何,不执行专利(例如明确允许实施专利或不起诉专利侵权的承诺)。将这种专利许可“授予”给一方意味着做出这样的协议或承诺,不对该方实施专利。
如果您在明知依赖专利许可的情况下传送涵盖的作品,并且任何人都无法通过公开可用的网络服务器或其他易于访问的方式免费并根据本许可的条款复制该作品的相应来源意味着,那么您必须 (1) 使相应来源如此可用,或 (2) 安排剥夺您自己对该特定作品的专利许可的利益,或 (3) 以与根据本许可的要求,将专利许可扩展到下游接受者。“故意依赖”是指您实际知道,但对于专利许可,您在一个国家/地区传达涵盖的作品,或您的接收者在一个国家/地区使用涵盖的作品,
如果根据或与单一交易或安排相关,您通过转让受保护作品进行转让或传播,并向接收受保护作品的某些各方授予专利许可,授权他们使用、传播、修改或传达所涵盖作品的特定副本,则您授予的专利许可将自动扩展到所涵盖作品和基于该作品的作品的所有接收者。
如果专利许可不包括在其覆盖范围内、禁止行使或以不行使根据本许可特别授予的一项或多项权利为条件,则该专利许可是“歧视性的”。如果您是与从事软件分发业务的第三方达成的协议的一方,则您不得传输涵盖的作品,根据该协议,您根据您传输作品的活动范围向第三方付款,并且根据该协议,第三方向将从您那里收到涵盖作品的任何一方授予歧视性专利许可 (a) 与您传达的涵盖作品的副本(或由这些副本制作的副本)有关,或( b) 主要针对包含涵盖作品的特定产品或汇编,并与之相关,
本许可中的任何内容均不得解释为排除或限制任何默示许可或其他对侵权的抗辩,这些许可或其他侵权辩护可能在适用的专利法下提供给您。
- 不放弃他人的自由。
如果对您施加的条件(无论是通过法院命令、协议或其他方式)与本许可的条件相抵触,它们不会免除您对本许可的条件的约束。如果您无法传达涵盖的作品以同时履行您在本许可下的义务和任何其他相关义务,那么您可能根本无法传达它。例如,如果您同意有义务向您向其传达程序的人收取版税以进一步传达的条款,那么您可以同时满足这些条款和本许可的唯一方法是完全避免传达程序。
- 与 GNU Affero 通用公共许可证一起使用。
尽管本许可证有任何其他规定,您有权将任何涵盖的作品与根据 GNU Affero 通用公共许可证第 3 版许可的作品链接或组合成一个单独的组合作品,并传达由此产生的作品。本许可证的条款将继续适用于所涵盖作品的部分,但 GNU Affero 通用公共许可证第 13 节中关于通过网络进行交互的特殊要求将适用于此类组合。
- 本许可证的修订版本。
自由软件基金会可能会不时发布 GNU 通用公共许可证的修订版和/或新版本。此类新版本在精神上与当前版本相似,但可能在细节上有所不同,以解决新问题或关注点。
每一个版本都有不同的版本号。如果程序指定某个编号版本的 GNU 通用公共许可证“或任何更高版本”适用于它,您可以选择遵循该编号版本或自由软件发布的任何更高版本的条款和条件基础。如果本程序未指定 GNU 通用公共许可证的版本号,您可以选择自由软件基金会曾经发布的任何版本。
如果本程序指定代理可以决定可以使用 GNU 通用公共许可证的哪些未来版本,则该代理接受某个版本的公开声明永久授权您为本程序选择该版本。
更高的许可证版本可能会给您额外的或不同的权限。但是,不会因为您选择遵循更高版本而对任何作者或版权所有者施加额外的义务。
- 免责声明。
在适用法律允许的范围内,本程序不提供任何保证。除非另有说明,否则版权所有者和/或其他方按“原样”提供程序,不提供任何形式的明示或默示保证,包括但不限于对适销性和特定用途适用性的默示保证. 有关程序质量和性能的全部风险由您承担。如果该程序被证明有缺陷,您将承担所有必要的服务、修理或更正的费用。
- 责任限制。
在任何情况下,除非适用法律要求或书面同意,任何版权持有人或任何其他按照上述许可修改和/或传达程序的方,均不对您的损害负责,包括任何一般性、特殊性、偶然性或后果性因使用或无法使用程序而造成的损害(包括但不限于数据丢失或数据不准确或由您或第三方造成的数据丢失或程序无法与任何其他程序一起运行),即使在以下情况下此类持有人或其他方已被告知此类损害的可能性。
- 第 15 和 16 条的解释。
如果上述免责声明和责任限制不能根据其条款赋予当地法律效力,则审查法院应适用最接近绝对放弃与本计划有关的所有民事责任的当地法律,除非有保证或假设责任附带一份程序的副本,以换取费用。
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
如果您开发了一个新程序,并且希望它尽可能地为公众所用,那么实现这一目标的最佳方式是使其成为每个人都可以根据这些条款重新分发和更改的免费软件。
为此,请在程序中附上以下通知。将它们附加到每个源文件的开头是最安全的,以最有效地说明保修除外;并且每个文件至少应该有“版权”行和一个指向完整通知所在位置的指针。
{one line to give the program's name and a brief idea of what it does.}
Copyright (C) {year} {name of author}
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
还要添加有关如何通过电子邮件和纸质邮件与您联系的信息。
如果程序进行终端交互,让它在交互模式下启动时输出一个类似这样的简短通知:
{project} Copyright (C) {year} {fullname}
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
假设的命令show w' and
show c' 应该显示通用公共许可证的适当部分。当然,您的程序的命令可能会有所不同;对于 GUI 界面,您将使用“关于框”。
如有必要,您还应该让您的雇主(如果您是程序员)或学校(如果有)签署该程序的“版权免责声明”。有关这方面的更多信息,以及如何应用和遵循 GNU GPL,请参阅 http://www.gnu.org/licenses/。
GNU 通用公共许可证不允许将您的程序合并到专有程序中。如果您的程序是一个子程序库,您可能会认为允许将专有应用程序与该库链接更有用。如果这是您想要做的,请使用 GNU 宽通用公共许可证而不是本许可证。但首先,请阅读 http://www.gnu.org/philosophy/why-not-lgpl.html。