docs: 固化 Pandoc 分发与内部许可策略

This commit is contained in:
SkyJourney
2026-07-30 10:49:21 +08:00
parent 81d9099eae
commit fb3ddada39
9 changed files with 428 additions and 11 deletions
+107
View File
@@ -0,0 +1,107 @@
YIXIONG Tech.ltd 公司内部专属软件许可证
版本 1.02026 年
版权所有 © 2026 YIXIONG Tech.ltd。保留所有权利。
一、适用范围
本许可证适用于“Markdown PDF 导出器”项目中由 YIXIONG Tech.ltd 拥有
著作权的源代码、原创主题、原创文档、构建脚本和其他原创材料(以下简称
“本软件”)。
本软件包含或调用的第三方程序、依赖、字体、主题和其他材料不受本许可证
重新许可,继续适用其各自的许可证、授权条件和使用边界。
二、授权对象
“内部授权用户”是指经 YIXIONG Tech.ltd 明确授权,并且属于以下范围的
个人或组织:
1. YIXIONG Tech.ltd 的员工;
2. YIXIONG Tech.ltd 直接或间接控制的组织;
3. 因内部项目需要而获得明确书面授权的承包商、供应商或合作人员。
授权在相关人员不再属于上述范围、授权被撤销或合作关系终止时结束,但
依法或书面约定需要继续履行的保密、知识产权和责任条款不因此失效。
三、允许的行为
在遵守本许可证、公司制度和适用法律的前提下,内部授权用户可以:
1. 为公司内部业务、测试、研发、评估和运维目的运行本软件;
2. 阅读、复制和修改本软件源代码;
3. 在公司控制或明确授权的设备、服务器、容器和内部网络中部署本软件;
4. 在内部授权用户之间分发源代码、Docker 镜像、安装包、压缩包和测试
产物;
5. 为内部使用目的制作和分发修改版本;
6. 使用本软件处理合法取得的 Markdown、图片、主题和其他文档资源。
四、禁止的行为
未经 YIXIONG Tech.ltd 事先明确书面许可,任何人不得:
1. 向公司外部或公开网络发布、上传、分发、提供下载或公开展示本软件的
源代码、二进制、镜像、安装包或实质性部分;
2. 出售、出租、转授权、托管经营或以本软件向公司外部提供商业服务;
3. 将本软件或修改版本置于开源许可证、公共领域声明或其他与本许可证
冲突的授权条件下;
4. 删除或隐瞒版权、许可证、来源、第三方声明或其他权利标识;
5. 超出第三方材料自身许可证或授权边界使用、复制或分发第三方材料;
6. 使用本软件侵犯他人知识产权、隐私、商业秘密或其他合法权益;
7. 规避访问控制、安全限制、资源隔离或审计措施。
五、修改与贡献
内部授权用户为公司项目提交的修改、补丁、文档和其他贡献,按照其劳动、
合作、保密、知识产权归属协议及公司制度处理。本许可证本身不改变已经
存在的职务成果、委托开发或合作开发权利归属。
未经 YIXIONG Tech.ltd 明确书面决定,内部修改或贡献不会使本软件自动
转为开源软件,也不会产生向公司外部公开源代码的义务。
六、用户文档与导出结果
用户输入的 Markdown、图片、数据和其他内容,其权利归原权利人所有。
使用本软件生成的 PDF、DOCX、图片或其他导出结果,不会仅因使用本软件而
自动受本许可证约束。
导出结果中嵌入的字体、图片、模板、主题或其他第三方材料,仍可能受其
各自许可证或授权条件约束,使用者应自行确保拥有相应权利。
七、第三方材料
本软件的第三方许可证与特殊分发边界记录在 `THIRD_PARTY_NOTICES.md`
以及相关资源目录的许可证文件中。若本许可证与第三方材料的有效许可证
发生冲突,对该第三方材料以其自身许可证为准。
八、未来公开许可
YIXIONG Tech.ltd 可以在未来自行决定以 Apache License 2.0、其他开源
许可证或其他授权方式发布本软件的某个版本。任何未来公开许可仅自明确
发布之日起适用于指定版本,不追溯授予当前内部版本,也不自动覆盖第三方
材料。
在公开许可正式发布前,本软件不是面向公众的开源软件。源代码可在公司
内部查看和修改,不等于授予公众使用、复制、修改或分发权。
九、免责声明
在适用法律允许的最大范围内,本软件按“现状”提供,不附带任何明示或
默示保证,包括但不限于适销性、特定用途适用性、无侵权、持续可用或数据
完整性保证。
十、责任限制
在适用法律允许的最大范围内,YIXIONG Tech.ltd 及贡献者不对因使用、
无法使用、修改、部署或分发本软件导致的任何间接、附带、特殊、惩罚性或
后果性损失承担责任。公司内部另有有效合同、制度或书面约定的,从其约定。
十一、终止
违反本许可证的授权自动终止。YIXIONG Tech.ltd 有权要求停止使用、删除
未经授权的副本,并依据适用法律、合同、保密协议和公司制度追究责任。
十二、其他
本许可证未明确授予的权利均由 YIXIONG Tech.ltd 保留。对本许可证的任何
例外、补充或变更必须由 YIXIONG Tech.ltd 以明确书面形式作出。
+10
View File
@@ -0,0 +1,10 @@
Markdown PDF 导出器
Copyright 2026 YIXIONG Tech.ltd
This product includes software developed by YIXIONG Tech.ltd and
contributors.
The original project code and documentation are currently licensed only for
authorized internal use under the proprietary LICENSE in this repository.
Third-party components and assets remain under their respective licenses.
See THIRD_PARTY_NOTICES.md.
+80
View File
@@ -0,0 +1,80 @@
# 第三方许可证与公开发布说明
根目录 `LICENSE` 是当前公司内部专属许可证,适用于本项目原创代码、原创
主题和原创文档,不会替换第三方组件、字体、主题或工具各自的许可证。
Apache License 2.0 仅是未来公开 GitHub 版本的候选许可证。当前仓库没有
通过 Apache License 2.0 向公司外部授予项目原创内容的使用或分发权。
本文件是发行审查入口,不替代各第三方项目附带的完整许可证。正式发行前
还应根据最终生产依赖生成完整的软件物料清单和许可证清单。
## Pandoc
`v0.6.0` 计划将 Pandoc 作为独立可执行程序用于 DOCX 转换。
- 项目:Pandoc
- 版权:John MacFarlane 及贡献者
- 许可证:GNU General Public Licenseversion 2 or later
- 交互方式:独立子进程、命令行参数和临时文档文件
- 项目地址:<https://pandoc.org/>
- 源码地址:<https://github.com/jgm/pandoc>
项目不链接、导入或修改 Pandoc 程序代码。发行包必须保留 Pandoc 的
`COPYING``COPYRIGHT` 和版本信息,并在相同版本的发行位置提供对应源码
获取方式。具体版本、校验值和分发规则见
[`docs/PANDOC_DISTRIBUTION.md`](docs/PANDOC_DISTRIBUTION.md)。
## Fandol 字体
`themes/_shared/official-fonts/` 包含 Fandol 中文字体的 WOFF2 转换版本。
Fandol 字体采用 GNU GPL,并附带字体例外条款。完整许可证、上游说明、
文件哈希和来源信息保存在该目录:
- [`LICENSE.txt`](themes/_shared/official-fonts/LICENSE.txt)
- [`README.md`](themes/_shared/official-fonts/README.md)
- [`UPSTREAM-README.txt`](themes/_shared/official-fonts/UPSTREAM-README.txt)
使用字体生成的 PDF、图片或 DOCX 不会仅因为使用该字体而自动受 GPL
约束。重新分发字体时必须保留上述许可证和来源文件。
## npm、Electron 与 Chromium 组件
项目直接或间接使用 MIT、Apache-2.0、BSD、ISC、EPL-2.0、MPL-2.0、
CC-BY-4.0 等许可证的软件包。`package-lock.json` 固定具体依赖版本;
Electron 和 Chromium 发行目录还包含其自身第三方许可证文件。
构建产物不得删除 Electron、Chromium 或其他依赖已经附带的许可证文件。
正式发布阶段应基于生产依赖和浏览器 Bundle 生成最终第三方清单,而不能
仅以根目录项目许可证代替。
## 仅限公司内部使用的 Typora 资源
以下目录来自公司内部安装的 Typora 1.14.7,目前没有确认可用于公开再
分发的完整授权:
```text
themes/typora-github/
themes/typora-pixyll/
themes/typora-whitey/
```
它们不受本项目内部专属许可证重新授权。即使其中部分样式可追溯到 MIT
上游,也不能据此推定 Typora 修改版本整体可以公开分发。
当前项目属于公司内部源码开放和内部部署阶段。根据现有内部使用决策,
公司内部的源码仓库、Web/Docker 部署、Desktop 安装包、ZIP 和测试产物
可以继续携带这三套主题,但不得向公司外部或公开网络发布、销售或授权。
接收内部发行物的人员也不能依据根目录项目许可证对这三套主题进行公司外
再分发。
在将项目发布到公开 GitHub 仓库前,必须完成以下方案之一:
1. 取得明确的公开分发授权;
2. 使用许可证明确的上游资源重新实现并完成来源审查;
3. 删除这些目录,并从准备公开的 Git 历史中清除其内容。
仅在后续提交中删除目录仍会使旧版本存在于 Git 历史。若不能取得授权,
公开发布应使用经过清理的历史或从合规快照创建新的公开仓库。上述门禁
只针对公司外部和公开网络发行,不阻止当前公司内部源码共享、部署和
安装包分发。
+186
View File
@@ -0,0 +1,186 @@
# Pandoc 运行时与分发规范
状态:`v0.6.0` 阶段 2 冻结。
## 1. 固定版本
`v0.6.0` 固定使用 Pandoc `3.9.0.2`
选择依据:
- 这是阶段冻结时的官方稳定版本;
- 本地 DOCX 探查和 Word/WPS 往返实验使用同一版本;
- 官方 Windows 和 Linux 静态发行包均包含 Lua 支持;
- 默认 `reference.docx` 已嵌入可执行文件;
- Windows 便携程序和 Linux 静态程序均不需要 Python。
不得在构建时自动下载“latest”。升级 Pandoc 必须作为显式变更,重新执行
DOCX OOXML、Word/WPS 互操作和包体回归。
## 2. 官方发行文件
### 2.1 Windows Desktop
```text
文件:pandoc-3.9.0.2-windows-x86_64.zip
SHA-256C97542F2800F446E788D9F74237856D995421AD1BB3CC8324286840C5F272D3A
压缩大小:41,250,425 字节
pandoc.exe231,056,136 字节
```
发行包来源:
<https://github.com/jgm/pandoc/releases/download/3.9.0.2/pandoc-3.9.0.2-windows-x86_64.zip>
Desktop 只将解压后的以下内容放入应用资源目录,不嵌入 MSI 安装器:
```text
resources/pandoc/3.9.0.2/windows-x86_64/
├── pandoc.exe
├── COPYING.rtf
└── COPYRIGHT.txt
```
`MANUAL.html` 可以放入发行文档或第三方说明,不是运行必需文件。
### 2.2 Docker amd64
```text
文件:pandoc-3.9.0.2-linux-amd64.tar.gz
SHA-256A69ABFABABDA8A56969A254B09F9553A7BE89DDEC00D4E0FE9FD585D71A67508
压缩大小:34,520,947 字节
pandoc161,618,224 字节
```
发行包来源:
<https://github.com/jgm/pandoc/releases/download/3.9.0.2/pandoc-3.9.0.2-linux-amd64.tar.gz>
该程序已在 `node:22-bookworm-slim` 中验证:
```text
pandoc 3.9.0.2
Features: +server +lua
not a dynamic executable
```
Docker 安装目标:
```text
/opt/pandoc/3.9.0.2/bin/pandoc
/usr/local/bin/pandoc -> /opt/pandoc/3.9.0.2/bin/pandoc
```
构建必须校验 SHA-256 后再解压。下载、校验和解压应位于同一构建层,不在
最终镜像保留下载缓存。
`v0.6.0` 正式验证范围为 Linux amd64。官方同时提供 arm64 包,但在完成
Playwright、Pandoc 和 DOCX 全链路验证前,不宣称 arm64 发布支持。
## 3. 路径发现与版本校验
应用服务采用以下优先级:
1. 服务端或开发环境显式配置的 `DOCX_PANDOC_PATH`
2. Desktop 的 `process.resourcesPath` 固定资源路径;
3. Docker 的 `/opt/pandoc/3.9.0.2/bin/pandoc`
4. 开发环境 `PATH` 中的 `pandoc`
约束:
- Web 页面、Markdown 和导出请求不能指定可执行路径;
- Desktop 渲染进程不能直接启动或选择 Pandoc;
- 显式路径只允许由受信任的服务端环境或开发者配置;
- 调用必须使用 Node `spawn`/`execFile` 的参数数组,不经过 Shell
- 路径解析后执行 `pandoc --version`,首行必须精确匹配
`pandoc 3.9.0.2`
- 不接受不同补丁版本静默降级;
- 能力检测失败时 DOCX capability 返回不可用原因,PDF 能力继续可用。
正式实现中的能力状态至少区分:
```text
available
not-found
version-mismatch
not-executable
probe-timeout
```
## 4. 许可证与源码义务
Pandoc 采用 GNU GPL version 2 or later。项目将其作为未修改的独立程序,
通过命令行参数和临时文件通信,不链接或导入 Pandoc 代码。
每个包含 Pandoc 的二进制发行必须:
- 保留 Pandoc `COPYING``COPYRIGHT` 和版本信息;
- 在第三方声明中标明 Pandoc 名称、版权、许可证和项目地址;
- 提供与所分发二进制精确对应的源码获取方式;
- 将对应源码归档与应用二进制放在同一版本的发布位置;
- 保证离线或内部转交发布产物时,许可证说明和源码获取信息同时转交;
- 不对 Pandoc 施加禁止再分发、禁止逆向或额外保密限制。
项目发布资产计划至少包含:
```text
md-to-pdf-0.6.0-x86_64-Setup.exe
md-to-pdf-0.6.0-x86_64.zip
pandoc-3.9.0.2-source.tar.gz
THIRD_PARTY_NOTICES.md
```
Docker 镜像必须包含许可证、版权声明和源码归档位置说明,并通过 OCI
`org.opencontainers.image.source`、版本和文档标签指向项目发布位置。
若未来修改 Pandoc 源码或构建方式,必须重新审查 GPL 对完整对应源码和
构建脚本的要求。公开或商业发布前应由项目权利人完成最终法律审查;本
规范是工程合规约束,不构成法律意见。
## 5. 包体实测
基线为本机已有 `v0.5.1` 正式产物。以下数值使用官方压缩包和解压程序
实测,NSIS 与 ZIP 最终值仍以 `v0.6.0` 构建结果为准。
| 产物 | v0.5.1 基线 | v0.6.0 估算 | 增量 |
| --- | ---: | ---: | ---: |
| Desktop 运行目录 | 333.98 MiB | 554.33 MiB | 220.35 MiB |
| NSIS 安装包 | 109.38 MiB | 约 148.71 MiB | 约 39.34 MiB |
| Desktop ZIP | 145.13 MiB | 约 184.47 MiB | 约 39.34 MiB |
| Docker 内容大小 | 615.91 MiB | 约 770.05 MiB | 154.13 MiB |
| Docker 压缩拉取层 | — | — | 约 32.92 MiB |
结论:
- Desktop 解压目录增长明显,但安装包和 ZIP 受压缩后增量约 39 MiB;
- Docker 运行时内容增长约 154 MiB,镜像传输增量约 33 MiB
- 不采用首次使用时联网下载,以保持内网和离线 Desktop 能力;
- 不使用 UPX 或二次修改官方二进制,避免兼容性、杀毒误报和合规风险;
- 不为了减小包体引入 Python 或另一个文档转换运行时。
## 6. 构建与更新规则
后续实现应增加受版本控制的运行时清单,至少记录:
- Pandoc 版本;
- 平台和架构;
- 官方下载地址;
- SHA-256
- 解压后的相对可执行路径;
- 许可证和版权文件;
- 对应源码归档地址。
构建流程必须:
1. 根据清单下载或读取缓存;
2. 校验 SHA-256
3. 拒绝未知平台和架构;
4. 将运行所需文件复制到固定目录;
5. 生成或复制第三方声明;
6. 构建后执行 `pandoc --version`
7. 用最小 Markdown 生成 DOCX 冒烟文件;
8. 检查发行包中不存在用户级 Pandoc 配置或缓存。
运行时不得读取用户 Pandoc 数据目录。DOCX 转换应通过隔离环境变量或显式
参数使用项目控制的模板、Lua Filter 和临时资源目录,确保不同设备输出
可复现。
+12 -2
View File
@@ -68,6 +68,15 @@ Python;左侧编辑器计划升级为 CodeMirror 6,并通过项目自有命
支持基础工具栏及后续 Front Matter、ECharts YAML 工具扩展。完整设计与 支持基础工具栏及后续 Front Matter、ECharts YAML 工具扩展。完整设计与
验收门禁见 [v0.6.0 设计文档](V0.6.0_DESIGN.md)。 验收门禁见 [v0.6.0 设计文档](V0.6.0_DESIGN.md)。
`v0.6.0` 阶段 2 已完成 Pandoc 运行时探查:固定 `3.9.0.2`,官方
Windows ZIP 和 Linux amd64 tarball 的 SHA-256 均已核验;Linux 静态程序
可直接运行于 `node:22-bookworm-slim`。Desktop 安装包预计增加约
39.34 MiB,解压目录增加约 220.35 MiB;Docker 压缩层预计增加约
32.92 MiB,运行内容增加约 154.13 MiB。项目当前采用公司内部专属许可,
未来公开 GitHub 时计划重新评估并切换到 Apache License 2.0。三套 Typora
复制主题允许继续用于公司内部源码共享、部署和安装包分发,但不受项目
许可证重新授权;公开 GitHub 前必须移除、替换或取得公开分发授权。
## 2. 已完成 ## 2. 已完成
### 2.1 项目骨架 ### 2.1 项目骨架
@@ -943,8 +952,9 @@ ECharts 第二阶段浏览器与 PDF 验证结果:
### 阶段一:v0.6.0 分阶段开发 ### 阶段一:v0.6.0 分阶段开发
- 阶段 1:冻结架构、能力边界和 Word/WPS 验收门禁; - 阶段 1冻结架构、能力边界和 Word/WPS 验收门禁;
- 阶段 2:冻结 Pandoc 版本、许可证、Docker 与 Desktop 分发方式; - 阶段 2冻结 Pandoc `3.9.0.2`、许可证、Docker 与 Desktop
分发方式;
- 阶段 3:实现 DOCX 共享模型和跨端导出协议; - 阶段 3:实现 DOCX 共享模型和跨端导出协议;
- 阶段 4:实现 CodeMirror 6 与可扩展基础 Markdown 工具栏; - 阶段 4:实现 CodeMirror 6 与可扩展基础 Markdown 工具栏;
- 阶段 5~8:依次实现资源预处理、动态 reference.docx、Pandoc 转换服务 - 阶段 5~8:依次实现资源预处理、动态 reference.docx、Pandoc 转换服务
+27 -8
View File
@@ -1,6 +1,6 @@
# v0.6.0 DOCX 导出与 Markdown 工具栏设计 # v0.6.0 DOCX 导出与 Markdown 工具栏设计
状态:阶段 1 设计冻结,尚未开始功能实现 状态:阶段 1 架构已冻结;阶段 2 Pandoc 运行时与许可证方案已冻结
## 1. 版本目标 ## 1. 版本目标
@@ -153,15 +153,19 @@ Desktop 只提供平台运行时、传输与保存能力。
### 4.3 Pandoc 分发 ### 4.3 Pandoc 分发
- 开发环境允许通过显式配置或 `PATH` 使用本地 Pandoc - 固定使用 Pandoc `3.9.0.2`,不在构建时跟随 latest
- Docker 镜像安装项目固定版本; - 开发环境允许通过 `DOCX_PANDOC_PATH``PATH` 使用相同版本;
- Windows Desktop 通过发行包资源目录携带固定版本; - Docker amd64 使用官方 Linux 静态发行包,安装到
`/opt/pandoc/3.9.0.2/`
- Windows Desktop 将官方 ZIP 中的 `pandoc.exe`、许可证和版权文件放入
`process.resourcesPath` 下的固定资源目录;
- 用户输入不得成为可执行路径或任意命令行参数; - 用户输入不得成为可执行路径或任意命令行参数;
- 启动时或导出前校验版本,并通过 capability 状态报告不可用原因; - 启动时或导出前校验精确版本,并通过 capability 状态报告不可用原因;
-布前记录 Pandoc 许可证、源码获取方式和第三方声明 -行时保留 GPL、版权声明和精确版本源码获取方式
- 下一阶段实测 Docker 镜像与 Desktop 安装包的体积增量 - Pandoc 继续作为独立子进程,不链接或导入其程序代码
最终版本号和分发方式在阶段 2 根据许可证与实际包体测试冻结。 官方文件、SHA-256、路径优先级、包体实测和许可证义务见
[Pandoc 运行时与分发规范](PANDOC_DISTRIBUTION.md)。
### 4.4 动态 reference.docx ### 4.4 动态 reference.docx
@@ -286,6 +290,21 @@ Front Matter 表单工具和 ECharts YAML 工具不在 `v0.6.0` 实现,但必
DOCX 沿用当前无历史数据库原则。Markdown、图片、中间 PNG、动态模板和 DOCX 沿用当前无历史数据库原则。Markdown、图片、中间 PNG、动态模板和
最终 DOCX 只存在于当前请求或桌面保存流程中。 最终 DOCX 只存在于当前请求或桌面保存流程中。
### 6.4 当前项目许可与内部发行
- 当前仓库采用公司内部专属许可证,包元数据标记为 `UNLICENSED`
- 公司内部可以共享源码,并分发 Web/Docker、Desktop、ZIP 和测试产物;
- 未经书面许可,不向公司外部或公开网络分发项目源码与二进制;
- 用户文档和导出结果不因使用本软件而自动受项目许可证约束;
- 三套 Typora 复制主题只允许随公司内部发行物分发;
- Apache License 2.0 是未来公开 GitHub 时的候选许可证,不在当前阶段
自动授予;
- 公开前必须重新审查第三方依赖、主题、字体、Pandoc 源码义务及 Git
历史。
根许可证和第三方边界分别见仓库根目录 `LICENSE`
`THIRD_PARTY_NOTICES.md`
## 7. 验收矩阵 ## 7. 验收矩阵
### 7.1 文档内容 ### 7.1 文档内容
+1
View File
@@ -7,6 +7,7 @@
"": { "": {
"name": "md-to-pdf", "name": "md-to-pdf",
"version": "0.5.1", "version": "0.5.1",
"license": "UNLICENSED",
"workspaces": [ "workspaces": [
"apps/*", "apps/*",
"packages/*" "packages/*"
+1
View File
@@ -2,6 +2,7 @@
"name": "md-to-pdf", "name": "md-to-pdf",
"version": "0.5.1", "version": "0.5.1",
"private": true, "private": true,
"license": "UNLICENSED",
"description": "可配置、可主题化的 Markdown PDF 导出工具", "description": "可配置、可主题化的 Markdown PDF 导出工具",
"workspaces": [ "workspaces": [
"apps/*", "apps/*",
+4 -1
View File
@@ -3,7 +3,10 @@
`typora-github``typora-pixyll``typora-whitey` 来自公司内部已安装的 `typora-github``typora-pixyll``typora-whitey` 来自公司内部已安装的
Typora 1.14.7,仅用于本项目的公司内部私有部署。 Typora 1.14.7,仅用于本项目的公司内部私有部署。
- 不对外发布、销售或宣称为项目原创; - 允许在公司内部源码仓库、Web/Docker 部署、Desktop 安装包、ZIP 和
测试产物中随项目分发;
- 不对公司外部或公开网络发布、销售、授权或宣称为项目原创;
- 不受仓库根目录项目许可证重新授权,内部接收者不得据此向公司外再分发;
- 保留主题清单中的原作者和来源信息; - 保留主题清单中的原作者和来源信息;
- Pixyll 的上游项目采用 MIT License - Pixyll 的上游项目采用 MIT License
- 若项目未来转为公开发布,必须先移除这些目录或重新完成分发授权审查。 - 若项目未来转为公开发布,必须先移除这些目录或重新完成分发授权审查。