Funding open-source software without compromising it

Funding open-source software without compromising it

在不妥协的前提下为开源软件提供资金

Funding open-source software is a challenge, especially for projects without a large existing community. While various approaches exist, they all come with their own drawbacks. For example, asking for donations is by far the most commonly used approach but also the least effective: you can ask (or pretty much beg) for donations for years and maybe you’ll receive $10 per month. Heartbleed is probably the most well-known vulnerability that highlights the problem of important but chronically under-funded open-source software projects.

为开源软件筹集资金是一项挑战,尤其是对于那些缺乏庞大现有社区的项目而言。虽然目前存在各种方法,但它们都有各自的弊端。例如,寻求捐赠是迄今为止最常用的方法,但也是最无效的方法:你可能请求(甚至可以说是乞求)捐赠多年,最后每个月可能只会收到 10 美元。Heartbleed 漏洞大概是最广为人知的案例,它凸显了那些重要但长期资金不足的开源软件项目所面临的问题。

Other alternatives tend to compromise the project in some way. For example, starting a side business of sorts (e.g. one that uses the project in question) means you now have to balance two jobs: the open-source project that you want to work on, and the commercial offering that is supposed to pay the bills.

其他替代方案往往会以某种方式损害项目。例如,开展某种副业(例如使用该项目进行商业化)意味着你现在必须平衡两份工作:你想要投入精力的开源项目,以及旨在维持生计的商业产品。

Another option is to take the open-core approach: the project is proprietary and there exists an open-source fork of sorts that contains a reduced feature set, in an attempt to entice users to use (and pay for) the proprietary version instead. GitLab is an example of one such project/company. While this too can work, almost always does it end up compromising the open-source version in some way, such as when features that previously existed in the open-source version are made proprietary instead because some C-whatever-O determined this was in the best interest of the sharehold..err I mean the community of course!

另一种选择是采用“开放核心”(open-core)模式:项目本身是专有的,并存在一个功能受限的开源分支,试图以此诱导用户使用(并付费购买)专有版本。GitLab 就是此类项目/公司的一个例子。虽然这种方法行得通,但它几乎总是会以某种方式损害开源版本,例如当原本存在于开源版本中的功能被转为专有,仅仅是因为某位“首席某某官”认为这符合股东的利益……啊,我是说,当然是为了社区的利益!

Then there are software grants such as those provided by NLnet. These are essentially (larger) donations but with additional requirements and caveats. Unfortunately, these typically come in one of two forms: Grants that are only open to existing large projects; Grants that come with highly specific requirements, such as you needing to be a resident of a specific country. NLnet used to be an exception to this, but this too changed in recent years and the requirements today unfortunately exclude a lot of projects. Sovereign Tech Agency is the only grant organisation that I know of that did (not sure they still do) grant money to projects that have yet to establish themselves, but it came with the caveat that you had to be based in Germany to be able to apply. FUTO appeared to be a promising alternative, until I found out that the organization is problematic at best (and that’s me trying to be nice) and not something I’d want to associate myself with.

此外还有诸如 NLnet 提供的软件资助。这些本质上是(金额更大的)捐赠,但附带了额外的要求和限制。不幸的是,这些资助通常只有两种形式:仅向现有大型项目开放的资助;或者带有极高特定要求的资助,例如要求申请人必须是特定国家的居民。NLnet 曾经是个例外,但近年来情况也发生了变化,如今的要求不幸地将许多项目拒之门外。Sovereign Tech Agency 是我所知的唯一一家曾(不确定现在是否依然如此)向尚未成熟的项目提供资金的资助机构,但它要求申请人必须位于德国。FUTO 曾看起来是一个有前途的替代方案,直到我发现该组织充其量是有问题的(这还是我尽量委婉的说法),我不希望与它有任何关联。

So why am I beating the dead horse that is “open-source funding is difficult”? Well, because for the last year or so I’ve been more actively trying to figure out how I can fund the long-term development of Inko without compromising the project somehow. Just relying on donations is something I don’t see working out in the long-term as it’s just not reliable enough when it comes to providing a steady income. One month you may be lucky and receive $500, while the next everybody cancels their donations because you said you don’t mind pineapple on pizza. Grants is something I’ve looked into extensively and there just aren’t any (that I know of) that would accept Inko. Which brings me to the idea of running a side business.

那么,我为什么要反复咀嚼“开源融资难”这个老生常谈的话题呢?嗯,因为在过去一年左右的时间里,我一直在积极探索如何为 Inko 的长期开发筹集资金,同时又不损害项目本身。仅仅依靠捐赠在长期来看是行不通的,因为它在提供稳定收入方面不够可靠。你可能这个月运气好收到 500 美元,下个月大家却因为你说你不介意披萨上放菠萝而取消了捐赠。我深入研究过资助渠道,但(据我所知)没有任何资助会接受 Inko。这让我萌生了开展副业的想法。

On paper I like the idea of running a business: no manager breathing down your neck, no overpaid directors that just move numbers across spreadsheets and somehow get paid 10倍 than the most important developer in the company, no “you must use AI or you’ll get fired” nonsense, and so on. Of course there are also challenges such as having to do everything yourself and sales being difficult, especially if you tend to under-sell your work like I do.

从理论上讲,我喜欢经营企业的想法:没有经理在背后盯着你,没有那些只会摆弄电子表格数字、薪水却比公司最重要的开发人员高出 10 倍的超高薪主管,没有“必须使用 AI 否则就开除”的废话,等等。当然,这也面临挑战,比如必须事必躬亲,而且销售很困难,尤其是如果你像我一样倾向于低估自己工作价值的话。

One important requirement I have though is that whatever the product is, it must be open-source. Not open-source as in open-core, but truly open-source. This isn’t just a philosophical or political stance, it’s also a practical one: having worked at GitLab for quite a while, splitting a product into a proprietary version and open-source fork (ish) introduces various technical challenges that I just don’t want to deal with again.

但我有一个重要的要求:无论产品是什么,它都必须是开源的。不是“开放核心”那种开源,而是真正的开源。这不仅是哲学或政治立场,也是出于实际考虑:在 GitLab 工作了很长一段时间后,我深知将产品拆分为专有版本和开源分支(或类似物)会带来各种技术挑战,我不想再处理这些问题了。

Which brings me to an idea I had, one that probably won’t work out but that I feel is worth sharing anyway; or at least one that’s worth writing down so I can get it out of my head. The idea is pretty simple: the product is open-source, licensed using a strict license such as the AGPL, optionally dual-licensed under a commercial license for those two companies that are allergic to the AGPL but somehow are willing to pay for a commercial license. The source code exists in two repositories: a private repository where all development takes place, and a public mirror.

这让我想到了一个主意,虽然它可能行不通,但我认为值得分享;或者至少值得写下来,好让它从我的脑海中清空。这个想法很简单:产品是开源的,使用 AGPL 等严格的许可证授权,并可选择为那些对 AGPL 过敏但又愿意支付商业许可费用的公司提供双重商业许可。源代码存在于两个仓库中:一个进行所有开发的私有仓库,以及一个公共镜像仓库。

The public mirror is only updated periodically (e.g. every three months), except for when something warrants an additional update (e.g. a critical security vulnerability for which it wouldn’t be ethical to delay it by three months). The private repository is also where the bug tracker resides and where users can submit patches (assuming you want to accept those in the first place). Access to the private repository requires one to active financially support the project somehow, such as by donating or by acquiring a commercial license.

公共镜像仅定期更新(例如每三个月一次),除非出现需要额外更新的情况(例如关键安全漏洞,如果推迟三个月更新是不道德的)。私有仓库也是错误追踪器所在的地方,用户可以在这里提交补丁(假设你愿意接受这些补丁的话)。访问私有仓库需要用户以某种方式积极地在经济上支持该项目,例如通过捐赠或购买商业许可证。

Crucially, to gain access to the private repository you must “sign” (i.e. this could just be a “Yes I agree to these terms” checkbox) an agreement of sorts which states that if you publicly host a copy of the private repository your access to this private repository will be revoked. The idea is that the software is truly open-source and that if you have access to a copy of the source code you can pretty much do whatever you want with it, as long as it meets the requirements of the open-source license, but access to the upstream repository is restricted to those with an active subscription. And if you don’t want to pay and are OK with updates being delayed by say three months, then you can use the public delayed mirror.

关键在于,要获得私有仓库的访问权限,你必须“签署”(这可能只是一个“我同意这些条款”的复选框)一份协议,声明如果你公开托管私有仓库的副本,你对该私有仓库的访问权限将被撤销。这个想法是,软件是真正的开源,如果你拥有源代码副本,只要符合开源许可证的要求,你几乎可以随心所欲地使用它,但上游仓库的访问权限仅限于拥有有效订阅的用户。如果你不想付费,并且可以接受更新延迟三个月左右,那么你可以使用公共的延迟镜像。

Besides nudging users towards paying the maintainers of the project, requiring users to pay to submit tickets (including bug reports) m…

除了引导用户向项目维护者付费外,要求用户付费才能提交工单(包括错误报告)……