From f71ed2e4dbad09c21a497c7f6ae8a52e2d60c3bc Mon Sep 17 00:00:00 2001 From: DrSmoothl <1787882683@qq.com> Date: Fri, 19 Jun 2026 02:26:33 +0800 Subject: [PATCH] chore(license): source-available non-commercial license MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch from open-source to a NapCat-style source-available, NON-commercial license so the free software cannot be resold / paid-deployed — which an OSI license (AGPL included) cannot prevent. Source stays public for study and non-commercial self-hosting; commercial use and public release of modifications require written permission; the native addon (snowluma-*.node) is carved out as proprietary. Explicitly NOT OSI open source. - LICENSE: SnowLuma Source-Available Non-Commercial License v1.0 (bilingual) - all 14 package.json: "license": "SEE LICENSE IN LICENSE" - README license section; CONTRIBUTING contribution-licensing note + a grant letting the project relicense contributions under commercial terms (contributors keep copyright) --- CONTRIBUTING.md | 10 +++ LICENSE | 131 +++++++++++++++++++++++++++++++ README.md | 6 ++ package.json | 1 + packages/bridge/package.json | 1 + packages/common/package.json | 1 + packages/core/package.json | 1 + packages/mcp/package.json | 1 + packages/onebot/package.json | 1 + packages/proto-defs/package.json | 1 + packages/protocol/package.json | 1 + packages/proton/package.json | 1 + packages/runtime/package.json | 1 + packages/sdk/package.json | 2 +- packages/ui/package.json | 2 +- packages/websocket/package.json | 1 + packages/webui/package.json | 1 + 17 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 LICENSE diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 87db0ee9..79afbebb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -285,3 +285,13 @@ git push origin v1.7.0 # → 仅触发 release.yml - 如果只是想确认"我这么改 OK 吗",欢迎开 draft PR,先把代码亮出来再讨论。 感谢你愿意花时间贡献 SnowLuma —— 这个项目能走多远,取决于你们每一个人。❄️ + +## 贡献的许可 / Licensing of contributions + +当你提交 PR,即表示你的贡献按本项目的 [`LICENSE`](LICENSE)(SnowLuma 源码可见非商业许可)授权,且你声明你有权这么做、贡献为你的原创(若含第三方材料,请在 PR 中显著标注其来源与许可证)。 + +**你保留对自己贡献的版权**,同时**授予 SnowLumaDevs 一项永久、全球、免费、不可撤销、可再许可(sublicensable)的许可**,可使用、复制、修改、分发你的贡献并基于其制作衍生作品,**包括以本项目非商业许可之外的其他条款(含商业条款)再许可与分发**——以便项目方无需逐一回头征求同意,即可在获授权的商业场景中使用社区贡献。 + +By opening a PR, you agree your contribution is licensed under the project's [`LICENSE`](LICENSE); you represent that you have the right to submit it and that it is your own work (clearly identify any third-party material in the PR). + +**You retain copyright in your contribution** and additionally grant SnowLumaDevs a **perpetual, worldwide, royalty-free, irrevocable, sublicensable license** to use, reproduce, modify, distribute, and create derivative works of your contribution, **including the right to relicense and distribute it under terms other than this project's non-commercial license (including commercial terms)** — so the project can use community contributions in authorized commercial scenarios without seeking each contributor's consent again. diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..dcf482d6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,131 @@ +SnowLuma Source-Available Non-Commercial License +SnowLuma 源码可见非商业许可 + +Version 1.0 · 2026-06-19 +Copyright (C) 2026 SnowLumaDevs +Contact: motricseven@foxmail.com + +中英文如有冲突,以中文为准。 +In case of any conflict between the Chinese and English text, the Chinese +version prevails. + +This is NOT an open-source license as defined by the Open Source Initiative: +it restricts commercial use and the public release of modifications. The +source is published for transparency, study, and non-commercial self-hosting. +本许可不是 OSI 定义的开源许可:它限制商业用途与修改版的公开发布。源码公开 +仅用于透明、学习与非商业的自托管。 + +=============================================================================== +1. Definitions / 定义 +=============================================================================== +- "Software" / "本软件": the SnowLuma source code and assets in this + repository, excluding the Native Addon (defined below) and any third-party + components. +- "You" / "你": any individual or entity exercising rights under this License. +- "Commercial Use" / "商业用途": any use primarily intended for or directed + toward commercial advantage or monetary compensation. This includes, without + limitation, selling or reselling the Software; offering paid hosting, + deployment, setup, or operation services based on the Software; bundling it + into a paid product or service; or running it to provide a service for a fee. + 包括但不限于:出售或转售本软件;提供基于本软件的付费托管、部署、代搭、代运营 + 服务;将其并入付费产品或服务;或以收费方式运行本软件对外提供服务。 +- "Native Addon" / "原生附加组件": the SnowLuma native binary components shipped + with the Software (e.g. `snowluma-*.node`, `snowluma-*.dll`, `snowluma-*.so`). + These are a separate, proprietary component and are NOT licensed under this + License — see Section 5. + +=============================================================================== +2. Grant / 授权 +=============================================================================== +Subject to the conditions and restrictions below, the copyright holder grants +You a worldwide, royalty-free, non-exclusive, non-transferable, revocable +license to: +在下列条件与限制下,著作权人授予你一项全球、免费、非独占、不可转让、可撤销的 +许可,允许你: + (a) view and study the Software; 查看与学习本软件; + (b) use and run the Software for personal or other Non-Commercial purposes; + 为个人或其他非商业目的使用与运行本软件; + (c) modify the Software for Your own Non-Commercial use; 为自己的非商业使用 + 修改本软件; + (d) redistribute the Software under the conditions in Section 3. + 在第 3 条的条件下再分发本软件。 + +=============================================================================== +3. Redistribution Conditions / 再分发条件 +=============================================================================== +You may redistribute the Software (modified or unmodified) ONLY if ALL of the +following are met. 仅当同时满足以下全部条件时,你方可再分发本软件(无论是否修改): + (a) it is Non-Commercial; 属非商业性质; + (b) the complete text of this License is included; 附带本许可的完整文本; + (c) all copyright, attribution, and notices are retained unaltered; + 保留全部著作权、署名与声明,且不得改动; + (d) PUBLIC release of a modified or derivative version requires the prior + written permission of the copyright holder. Private, non-public + modifications for Your own Non-Commercial use are permitted. + 公开发布修改版或衍生版,须事先获得著作权人书面许可;为你自己非商业使用 + 而作的、不公开的修改则被允许。 + +=============================================================================== +4. Restrictions / 限制 +=============================================================================== + (a) Commercial Use of the Software in any form is PROHIBITED without the + prior written authorization of the copyright holder. + 未经著作权人事先书面授权,禁止以任何形式对本软件进行商业使用。 + (b) You may not develop, publish, or distribute another project based on the + Software without the prior written authorization of the copyright holder. + 未经著作权人事先书面授权,不得基于本软件开发、发布或分发另一个项目。 + (c) You may not remove, obscure, or alter any copyright, attribution, license, + or notice. 不得移除、遮蔽或更改任何著作权、署名、许可或声明。 + +=============================================================================== +5. Native Addon / 原生附加组件 +=============================================================================== +The Native Addon is proprietary and is NOT covered by this License. It is +distributed only as a precompiled binary bundled with the Software. No rights +are granted to it other than to run it as bundled for the Non-Commercial use +permitted above; in particular, no right to reverse engineer, reproduce, +modify, redistribute separately, or relicense it is granted. +原生附加组件为专有组件,不在本许可范围内,仅以随本软件分发的预编译二进制形式提供。 +除按上文允许的非商业用途以其随附形式运行外,不授予任何权利;尤其不授予对其进行逆向、 +复制、修改、单独再分发或再许可的权利。 + +=============================================================================== +6. Additional Permissions / 额外授权 +=============================================================================== +Any use not granted by this License — including Commercial Use and the public +release of derivative works — requires prior written permission, which must be +requested from and granted by the copyright holder (Contact above). +本许可未授予的任何用途——包括商业使用及公开发布衍生作品——均须事先取得著作权人的 +书面许可(见上方联系方式)。 + +=============================================================================== +7. Third-Party Components / 第三方组件 +=============================================================================== +Third-party code and components retain their own original licenses, which +govern those parts. 第三方代码与组件遵循其各自的原始许可,并以其许可为准。 + +=============================================================================== +8. Termination / 终止 +=============================================================================== +Any breach of this License automatically terminates the rights granted to You +under it. 任何违反本许可的行为将自动终止你依本许可获得的权利。 + +=============================================================================== +9. Disclaimer / 免责声明 +=============================================================================== +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER +LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. +本软件按“现状”提供,不附带任何明示或默示的担保,包括但不限于适销性、特定用途 +适用性及不侵权的担保。在任何情况下,作者或著作权人均不对因本软件或其使用所引起 +的任何索赔、损害或其他责任负责。 + +=============================================================================== +10. Governing Law / 适用法律 +=============================================================================== +This License is governed by the laws of the mainland of the People's Republic +of China, excluding its conflict-of-laws rules. +本许可适用中华人民共和国大陆地区法律(不含其冲突法规则)。 diff --git a/README.md b/README.md index 36250fdf..e5e4f2be 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,12 @@ SnowLuma 是一个基于 TypeScript 的协议转换框架,旨在为 QQ 客户 2. 运行 `./launcher.bat` (Windows) 或 `./launcher.sh` (Linux)。 3. 访问 `http://localhost:5099` (初始账号 `admin`,密码见控制台输出)。 +## 许可 / License + +SnowLuma 采用 **源码可见非商业许可(SnowLuma Source-Available Non-Commercial License)**,见 [`LICENSE`](LICENSE)。**这不是 OSI 开源许可**:源码公开供查看、学习与非商业自托管,但**禁止任何商业使用**(出售、转售、付费托管 / 代搭 / 代运营等),公开发布修改版须事先书面授权。随附的原生附加组件(`snowluma-*.node` 等)为专有组件,不在本许可范围内。二进制发行包另受 [`EULA.md`](EULA.md) 约束;商业授权请联系 motricseven@foxmail.com。参与贡献请阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md)。 + +SnowLuma is under a **source-available, non-commercial** license (see [`LICENSE`](LICENSE)) — **NOT** an OSI open-source license. The source is published for study and non-commercial self-hosting; **commercial use is prohibited** without prior written permission, and the bundled native addon (`snowluma-*.node`) is proprietary and not covered by this license. + ## 鸣谢 参考了 [LagrangeV2](https://github.com/LagrangeDev/LagrangeV2) 的协议定义与 [NapCatQQ](https://github.com/NapNeko/NapCatQQ) 的实现思路。 diff --git a/package.json b/package.json index 41f47b65..d2ca01fc 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "snowluma-monorepo", "version": "1.9.13", "description": "SnowLuma monorepo workspace (pnpm)", diff --git a/packages/bridge/package.json b/packages/bridge/package.json index aa8c29ed..e6d8ff26 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/bridge", "version": "1.9.13", "private": true, diff --git a/packages/common/package.json b/packages/common/package.json index 8085b162..d747ee8b 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/common", "version": "1.9.13", "private": true, diff --git a/packages/core/package.json b/packages/core/package.json index 669ac58a..9ad02c0f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/core", "version": "1.9.13", "description": "SnowLuma core - NTQQ packet sniffer with Node.js native addon", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 219b9322..a5ce646a 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/mcp", "version": "1.9.13", "description": "MCP server exposing the SnowLuma OneBot action catalog (docs + JSON Schemas) and optional execution to LLM clients.", diff --git a/packages/onebot/package.json b/packages/onebot/package.json index 3985e38e..039dbcfa 100644 --- a/packages/onebot/package.json +++ b/packages/onebot/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/onebot", "version": "1.9.13", "private": true, diff --git a/packages/proto-defs/package.json b/packages/proto-defs/package.json index b0617f43..74173ac5 100644 --- a/packages/proto-defs/package.json +++ b/packages/proto-defs/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/proto-defs", "version": "1.9.13", "private": true, diff --git a/packages/protocol/package.json b/packages/protocol/package.json index f6a825b1..b7284a98 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/protocol", "version": "1.9.13", "private": true, diff --git a/packages/proton/package.json b/packages/proton/package.json index ec8c786f..c6536ddd 100644 --- a/packages/proton/package.json +++ b/packages/proton/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/proton", "version": "1.9.13", "private": true, diff --git a/packages/runtime/package.json b/packages/runtime/package.json index daff2fe7..9570b1ba 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/runtime", "version": "1.9.13", "private": true, diff --git a/packages/sdk/package.json b/packages/sdk/package.json index fea973d1..8d67e8c4 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -23,7 +23,7 @@ "url": "git+https://github.com/SnowLuma/SnowLuma.git", "directory": "packages/sdk" }, - "license": "UNLICENSED", + "license": "SEE LICENSE IN LICENSE", "type": "module", "sideEffects": false, "main": "./dist/index.js", diff --git a/packages/ui/package.json b/packages/ui/package.json index 456f9698..f837db94 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -22,7 +22,7 @@ "url": "git+https://github.com/SnowLuma/SnowLuma.git", "directory": "packages/ui" }, - "license": "UNLICENSED", + "license": "SEE LICENSE IN LICENSE", "type": "module", "sideEffects": [ "**/*.css" diff --git a/packages/websocket/package.json b/packages/websocket/package.json index 61880dce..76b9eaff 100644 --- a/packages/websocket/package.json +++ b/packages/websocket/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "@snowluma/websocket", "version": "1.9.13", "private": true, diff --git a/packages/webui/package.json b/packages/webui/package.json index df0af7a2..db99c840 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -1,4 +1,5 @@ { + "license": "SEE LICENSE IN LICENSE", "name": "webui", "private": true, "version": "1.9.13",