QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

开源还能造假?Neo4j 状告 3 家公司虚假宣传开源,法院判定胜诉

  • 2022-03-23
  • 本文字数:2920 字

    阅读完需:约 10 分钟

开源还能造假?Neo4j 状告3家公司虚假宣传开源,法院判定胜诉

 去年,Neo4j 和 Graph Foundation 签订了保密和解协议,Graph Foundation 同意不再宣称其 ONgDB 是 Neo4j EE(Neo4j 企业版)的“100%免费和开源版本”。近期,法院也对 Neo4j 起诉的另外两家企业——PureThink 和 iGov,做出了类似的裁决。

 

Neo4j 起诉三家公司的原因是,Graph Foundation、PureThink 和 iGov 都将 ONgDB 作为 Neo4j EE 的“免费和开源”版本提供服务并做广告宣传。

 

发生了什么?

 

Neo4j 是一款由 Neo4j 公司开发的高性能 NoSQL 图形数据库。ONgDB 则是 Graph Foundation 以开源方式运营的项目。ONgDB 自 Neo4j EE(Neo4j 企业版)分叉而来,其初始版本的源代码来自 Neo4j EE 代码库完全闭源之前的代码。

 

2018 年 5 月,Neo4j EE 放弃了 GNU Affero 通用公共许可证(AGPL),采用了一个新的许可证。该许可证包含了 AGPLv3 中的条款和 Commons Clause 许可证中的额外限制,被法院称成为“Neo4j 瑞士软件许可证”。这个新的许可证禁止非付费用户转售代码或提供一些支持服务,不在 OSI 认定的开源许可证列表中。2018 年 11 月,Neo4j 公司以仅商业许可的方式发布了 Neo4j EE 3.5 版本。

 

本来开源分叉是很常见的,但这件事情的问题在于,ONgDB 及其公司一直宣称自己是开源的 Neo4j EE,造成很多混淆。目前 ONgDB 已经完全改版,弃用了所有与 Neo4j 相关的商标信息。

 

目前,该组织停止了对 ONgDB 版本 3.4、3.5 和 3.6 的支持,并发布了 AGPLv3 许可的 Neo4j EE 版本 3.4.0.rc02 的分支 ONgDB 1.0,用户商用时需要遵守对应的开源协议,而 ONgDB 的社区版开源协议为 GPLv3。

 

而 PureThink 是一家成立于 2002 年的软件开发公司,主要服务对象为美国政府部门。根据裁决协议,在签署的 Neo4j EE 购买协议中,双方约定 Neo4j 商标仅用于 Neo4j EE 及其相关支持服务营销和转售商业许可,以换取转售许可的共享收入。

 

但是,PureThink 开发了 Neo4j 的“政府版”并意图销售给美国国税局(IRS)。PureThink 发布版本中仅有 AGPLv3 许可证。在被要求查看原版之后,PureThink 表示 IRS 可以使用 Neo4j EE 的开源版本,并向 PureThink 支付咨询费用。Neo4j 与 PureThink 合约到期后,PureThink 和 iGov 继续营销该“政府版”,并宣扬 ONgDB 是 Neo4j EE 的免费开源版本。

 

去年 5 月,法官审理了针对 PureThink 的诉讼,iGov 同意了 Neo4j 的部分简易判决动议,禁止被告侵犯原告的 Neo4j 商标,并不得将 ONgDB “作为 Neo4j EE 的免费开源替代品……”

 

之后,被告提出上诉,美国第九巡回上诉法院在今年 2 月确认了下级法院的裁决。法院认为,PureThink 公司删除 Commons Clause 这一行为是不合理的,所以其在广告中声称 ONgDB 软件是开源的,可以被认定为虚假广告。

 

法院最终判决,禁止 PureThink 宣传、推广或者提及“ONgDB 是一个免费和开源的源代码”、“可直接替换相同版本的 Neo4j 企业版”等任何可能误导消费者的声明。

 

真假开源之争

 

3 月 17 日,OSI 发文庆祝法院的裁决。该组织在文章中评论道:“如果明明不是开源,就不要再说自己是开源了”,并表示“法院只是确认了我们早已知道的事实——开源是一个艺术术语,指的是在特定类型的许可下获得许可的软件,而该许可是否经过 OSI 批准则是用户采用的一个至关重要的因素。”

 

独立技术律师Kyle E. Mitchell反驳了 OSI 的文章,称其是“自私的、误导性的和错误的”,法院并未就“开源”的含义做出任何法律裁决。他指出,整个诉讼给出的最关键信号是法院裁定 PureThink 无权从文件中删除 Commons Clause。

 

Commons Clause 作为限制许可软件销售的附加条件,在 2018 年初由多家开源公司共同创建,并由 FOSSA 公开贡献,其初衷就是限制云厂商使用开源代码提供商业服务,但不回馈社区的行为。

 

Commons Clause 当初发布时,就在开源社区引发了强烈反响。支持者认为这是开源许可道路上合理而积极的演变,让开源公司能够在投入开源项目的同时成功运营业务。而反对者认为这违背了开源精神。更重要的是,许多公司为保证自己符合开源理念,只使用获得 OSI 批准的许可证许可的开源软件。在增加了 Commons Clause 之后,此类项目可能面临威胁。

 

当时,Debian、Mozilla 和 The Document Foundation 等支持的 OSI 就发文表示:“开源”如果没有单一的、标准的定义,那么我们所知道的软件开发则是不可能的。任何人都能定义开源就会没有信任,没有信任就没有社区、没有协作,也没有创新。

 

OSI 在近日的发文中也表示,“通过添加非自由的 Commons Clause 创建一个不同的许可证,该软件就不能被描述为开源,否则就是非法的虚假广告。”但 Mitchell 认为,这是对判决的误读。

 

Mitchell 指出,法院将最初的 Neo4j 版本视为开源,在 Neo4j 添加了 Commons Clause 后,仍然被法院认为是“开源”的:

 

2018 年 5 月,原告发布了 Neo4j EE 3.4 版,他们继续在开源许可下提供;但是他们用了更严格的许可取代 AGPL,其中包括 AGPLv3 中的条款和 Commons Clause 提供的附加限制。

 

只有在 Neo4j 独家获得商业许可时,法院认为,这才标志着开源发布的结束:

 

2018 年 11 月,原告仅在商业许可下发布了 Neo4j EE 3.5 版。从那时起,原告不再在开源基础上提供 Neo4j EE。

 

“造成问题的原因是取消了 Commons Clause,双方的律师也都是围绕这点争论的。”Mitchell 表示。

 

事实上,Redis Labs 曾短暂地使用过 Commons Clause,但因为这项条款下的软件是否开源问题而放弃。

 

2018 年 8 月,Redis Labs 宣布决定将 Commons Clause 作为附加条款添加到其针对某些附加模块的自由开源许可证中。该条款使源代码具有可用性,但使用者无法“出售”模块,其中包括将它们作为商业服务来提供。

 

但半年后,Redis Labs 就宣布放弃 Commons Clause ,转而采用了新的可用源许可 RSAL。“它(Commons Clause)不起作用。对于这些模块是否是开源的,人们一直很困惑。它们不是开源的。” Redis Labs 首席营销官 Manish Gupta 解释道。

 

谁定义“开源”?

 

“我喜欢自由软件,虽然现在还不清楚是哪种自由。”那什么是开源、谁来定义开源呢?

 

OSI 虽然被公认为开源“官方”组织,但也有开发者不认为该由 OSI 来定义开源。“我不认为你、开源倡议组织 (OSI) 或其他任何人能够单独给真正的开源下定义。”开发者Martin Tournoij曾在自己的个人博客中表示,“我不反对开源定义(OSD),但以它来评判所有对开源的使用是行不通的。纠正数以百万计的人‘开源用错了’,并不是完成任何有意义的事情的好策略——这并不能促进开源的使用。”

 

“不同群体之间对‘什么构成开源’存在相当大的分歧,所以在没有前提下声称单独的某一方可以定义和仲裁开源,这对我来说似乎很疯狂。”有开发者说道,“或者您已经忘记了自己与社区之间的差异,就像是‘如果不与我们站在一起,你就是反对开源’。无论如何,都不会让我将 OSI 作为指南针。不确定是谁选举他们成为开源之王。”

 

此外,还有开发者指出,一些公司仅仅因为他们的源代码在 GitHub 上就在推广时将其产品称为“开源”,即使许可证与任何专有许可证一样具有限制性。

 

“开源如果被滥用,则可能是欺诈性的。”开源软件发起人之一 Bruce Perens 评价道。如今,开源已经成为科技企业发展的标配,但也伴随着一些虚假开源宣传的事情发生。建造健康、可持续的开源生态仍任重而道远。


2022-03-23 18:043861

评论

发布
暂无评论
发现更多内容

韦小宝真的幸福吗 | Random Forest

张利东

Python 学习

KubeFATE: 用云原生技术赋能联邦学习(一)

亨利笔记

人工智能 学习 FATE KUBEFATE

InfoQ写作平台首秀,来个自我介绍

nuhcoad

个人感想

神经网络的激活函数为什么要使用非线性函数

王坤祥

神经网络 激活函数

从数据闭环谈微服务拆分

松花皮蛋me

微服务

阿里巴巴Java开发手册泰山版解读

Bruce Duan

Day 47|Week 07-5 曾国藩家书|问学篇-学问何处何时都可做

熊小北同学

南丁格尔科普

小匚

多云的一点思考

HU

怎样算是一个好的开发者?

水滴

开发者

为什么正在使用的Java版本跟环境变量的版本不一致

阡陌r

Java 踩坑

使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源

mzlogin

CDN Jekyll GitHub Pages 个人博客

消息队列Kafka - acks参数

Java收录阁

kafka

高仿瑞幸小程序 00 准备工作

曾伟@喵先森

小程序 微信小程序 大前端 瑞幸

Java并发编程系列——锁

孙苏勇

Java Java并发 并发编程 多线程

DDD 实践手册(2. 实现分层架构)

Joshua

设计模式 领域驱动设计 DDD 系统架构 分层架构

MySQL的死锁系列- 锁的类型以及加锁原理

程序员历小冰

MySQL

死磕Java并发编程(7):读写锁 ReentrantReadWriteLock 源码解析

Seven七哥

Java并发 读写锁 ReentrantReadWriteLock

HashMap 的 7 种遍历方式与性能分析

Bruce Duan

Java 性能 hashmap 遍历

说出来就不灵啦

伯薇

糊涂 活在当下 享受状态 生活状态 观察者

如何优雅滴在手机上跑Python代码

王坤祥

Python 移动应用 手机编程

Netty 源码解析(四): Netty 的 ChannelPipeline

猿灯塔

学习来应对创业的未知

Neco.W

创业 重新理解创业

程序员陪娃漫画系列——魔方

孙苏勇

程序员 生活 陪伴 漫画

游戏夜读 | 2020周记(3.27-4.3)

game1night

浅析 Cocoapods-Packager 实现

Edmond

ruby ios CocoaPods binary packager

把成功过成自己的生活

子铭

成功学 生活状态

经济大萧条对我的启示

Neco.W

创业 自我管理 职场 自我提升

MySQL中order by语句的实现原理以及优化手段

天堂

Java MySQL 性能优化

即将步入职场,忐忑而又期待的新人菜鸟

菜农阿飞

成长 新人

关于5G RCS的产品猜想

机器鸟

开源还能造假?Neo4j 状告3家公司虚假宣传开源,法院判定胜诉_开源_褚杏娟_InfoQ精选文章