# 第三方组件与开源许可声明（THIRD-PARTY NOTICES）

适用产品：**North Coffee Roasters**（设备端控制软件，Windows / Android）
软件版本：见 `cmake/CMakeLists.txt` 的 `project(VERSION)`（当前 **1.1.32**；应用内「设置 → 关于本机」会显示同一版本号）
本声明随安装包一起交付（`installer/build-deploy-and-pack.bat` 会自动拷到 `deploy\` 目录）。

> 本软件本身是**专有软件**，源码不公开。下面列出的只是它**用到的开源组件**，
> 以及这些组件许可要求我们向你（最终用户）提供的权利与信息。

---

## 1. Qt 6.5.3（LGPL-3.0）

本软件使用 **Qt 6.5.3**，按 **GNU Lesser General Public License v3.0（LGPL-3.0）** 使用，
许可全文见同目录 `licenses/LGPL-3.0.txt`（LGPL-3.0 引用 GPL-3.0 条款，
全文见 `licenses/GPL-3.0.txt`）。

### 1.1 使用的 Qt 模块（均为 LGPL-3.0，动态链接）

| 模块 | 用途 |
|---|---|
| QtCore / QtGui | 基础库、图形 |
| QtQuick / QtQml / QtQuickControls2 / QtQuickLayouts | 全部界面 |
| QtNetwork | 云端与局域网通信 |
| QtBluetooth | 蓝牙连接烘焙机 |
| QtSerialPort / QtSerialBus | 串口、MODBUS（含 Artisan 用的 MODBUS TCP 从站） |
| QtTextToSpeech | 语音播报 |
| QtConcurrent | 后台任务 |

> 应用内「设置 → 关于本机 → 随包分发的 Qt 模块」显示的是**运行时扫描随包 Qt 库**
> 得到的清单（`src/app/osslicenseinfo.cpp` 的 `qtModules()`）：装了什么就显示什么，
> 上面这张表只是按用途做的归纳。
>
> Windows 安装包另外会随附 Qt Quick 运行所需的 QtSvg、QtWidgets 等 LGPL-3.0 库；
> 未使用的 QtPdf / QtStateMachine / QtQuick.Particles / Timeline / Effects /
> QtQuick.Dialogs 及多余 Controls 风格**已在打包时剔除**
> （`installer/build-deploy-and-pack.bat` 的 Step 3b1，已用 `smoke-test-qml.ps1` 验证启动正常）。

> **没有使用**任何「仅 GPL / 仅商业」的 Qt 模块（QtHttpServer、QtCharts、
> QtDataVisualization、QtGraphs、QtVirtualKeyboard、QtInsightTracker 均不在产物中）。
> 可用 `scripts/lgpl-check.ps1` 对任意发布目录或 APK 复核。

### 1.2 你对 Qt 库的权利（LGPL-3.0 要求）

1. **可以替换 Qt 库**：本软件通过动态库（Windows 为 `Qt6*.dll`，Android 为
   `libQt6*.so`）使用 Qt；你可以用**你自己编译的等价 Qt 库**替换它们，
   程序不校验这些文件的签名或哈希。
   - Windows：直接替换安装目录下的 `Qt6Core.dll` 等文件即可；若替换后无法启动，
     把原文件改回即可恢复。
   - Android：替换 APK 内 `lib/<abi>/libQt6*.so` 后，用你自己的密钥重新签名并安装
     （需要开启「安装未知来源应用」）。重新签名的 APK 与原包不能共存，
     请先卸载原应用（本地烘焙数据请先导出/备份）。
2. **可以反向工程，但仅限为调试你对 Qt 库所做的修改**。
   本软件的使用协议中「不得反向工程」的条款**不适用于 Qt 库**这一目的
   （见 `installer/license.txt` 第 **1.4** 条的例外说明）。
3. **可以获取 Qt 源码**：
   - 官方同版本源码：<https://download.qt.io/official_releases/qt/6.5/6.5.3/submodules/>
     （按上表模块下载，如 `qtbase-everywhere-src-6.5.3.tar.xz`、
     `qtdeclarative-everywhere-src-6.5.3.tar.xz`、`qtconnectivity-…`、
     `qtserialport-…`、`qtserialbus-…`、`qtspeech-…`）
   - 或书面索取：联系 `www.fukaitong.cn` 上的技术支持方式，我们会提供与本产品
     所用版本一致的 Qt 源码（含构建脚本说明）。
   - **我们未修改 Qt 源码**；若将来修改，会在此处公开修改内容。

### 1.3 Qt 内部附带的第三方组件

Qt 二进制里包含若干第三方库（PCRE2、zlib、libpng、FreeType、HarfBuzz、
SQLite、OpenSSL 等），它们各自按自己的许可分发，完整清单见 Qt 源码树
`<模块>/LICENSES/` 目录。其中与本产品直接相关的：

| 组件 | 许可 | 说明 |
|---|---|---|
| OpenSSL 3.x（Android） | Apache-2.0 | 由 `android_openssl.pri` 引入，全文见 `licenses/Apache-2.0.txt` |
| PCRE2 | BSD-3-Clause | QtCore 正则引擎，全文见 `licenses/BSD-3-Clause.txt` |

---

## 2. 其他开源组件

| 组件 | 版本/位置 | 许可 | 版权 |
|---|---|---|---|
| QR Code generator library（qrcodegen） | `src/thirdparty/qrcodegen/` | MIT（`licenses/MIT-qrcodegen.txt`） | Copyright (c) Project Nayuki |
| JetBrains Mono | `fonts/JetBrainsMono-Regular.ttf` | **SIL Open Font License 1.1**（`licenses/OFL-1.1.txt`） | Copyright (c) 2020 The JetBrains Mono Project Authors |
| iconfont 图标字体 | `fonts/iconfont.ttf` | 阿里 iconfont 站点条款 | 图标来源见项目图标清单 |
| PDFium（Qt PDF 内嵌） | 仅当包内仍含 `Qt6Pdf.dll` 时适用（1.1.30 起打包脚本 Step 3b1 已剔除） | BSD-3-Clause（`licenses/BSD-3-Clause.txt`） | Copyright 2014 PDFium Authors |

> SIL OFL 1.1 要求随字体分发许可全文，已随包提供 `licenses/OFL-1.1.txt`。
> iconfont 若为外部设计稿，请在该图标清单中一并注明来源与授权。

---

## 3. 不随本产品分发的组件

- **服务端 `FKT_Server`**（云端接口/升级服务）由发布方自行部署运行，
  **不随本软件分发给用户**。它使用了 QtHttpServer（GPL-3.0-only 或 Qt 商业授权），
  因为它不作为二进制交付给第三方，所以不触发 GPLv3 的分发义务。
  详见 `FKT_Server/LICENSING-NOTE.md`。
- Android 构建中被 `android-build/*/build.gradle` 显式排除的模块
  （Multimedia/FFmpeg、CAN bus、SQL 驱动、Quick3D、VirtualKeyboard、InsightTracker）
  **不在产物内**。

---

## 4. 如何自行复核（可交给客户/审核方）

```powershell
# Windows 安装目录
powershell -ExecutionPolicy Bypass -File scripts\lgpl-check.ps1 -Path "<安装目录>"

# Android APK
powershell -ExecutionPolicy Bypass -File scripts\lgpl-check.ps1 -Path "<xxx>.apk"
```

输出 `[OK]` 表示产物中不含任何 GPL-only / 商业专属 Qt 模块。

---

## 4.1 OpenSSL（3.x，Apache-2.0）

本软件使用 **OpenSSL 3.x** 作为 Qt Network 的 TLS 后端（访问 `https://fukaitong.cn` 需要）：

| 项目 | 内容 |
|---|---|
| 组件 | OpenSSL（`libssl-3-x64.dll` / `libcrypto-3-x64.dll`） |
| 许可证 | **Apache License 2.0**（全文见「开源许可 → Apache-2.0」页签，或 `licenses/Apache-2.0.txt`） |
| 版权 | Copyright 1998-2024 The OpenSSL Project Authors；Copyright 1995-1998 Eric A. Young, Tim J. Hudson |
| 项目地址 | https://www.openssl.org/source/ |
| 是否修改 | 未修改，按原样动态链接；用户可自行替换为同版本官方构建 |

> Apache-2.0 与 LGPL-3.0 兼容；分发时保留本声明与许可证全文即可。

---

## 4.2 私有根 CA（自签 TLS）

客户端内置一枚**私有根 CA**（`qrc:/tls/ca.cer`），用于校验本产品服务端的自签证书：

- 仅在本客户端进程内加入 Qt 信任链，**不写入操作系统证书库**，不影响其它软件
- 审计方式：`certutil -dump ca.cer`，Subject 含 `North Coffee Roasters Root CA`，SAN 为服务端 IP
- 服务端证书更换需要沿用同一枚 CA 重签（详见部署文档），否则客户端需同步升级

---

## 5. 联系

技术支持：`www.fukaitong.cn`
如对本声明或 LGPL-3.0 合规有疑问，欢迎通过上述渠道联系我们。
