🚀 世界首個在手機上完整運行 Flutter 開發環境的解決方案
flutter build apk ✅ | flutter run + Hot Reload ✅ | 原生速度 ✅ | 一鍵安裝 ✅
中文 | English
🍴 Forked from mumumusuc/termux-flutter
📱 在 Termux 中運行 Flutter App,支援 Hot Reload!
Flutter「支援 arm64」≠「能在任何 arm64 上開發」
| Flutter 說的 arm64 支援 | 實際意義 |
|---|---|
| arm64 Target | ✅ 你的 App 能跑在 arm64 設備 |
| arm64 Host | |
| Android/Termux Host | ❌ 從未支援 |
Flutter 假設的 Linux host 環境:
- glibc(標準 C 庫)
- 完整 POSIX
- 標準 toolchain
但 Termux 是:
- bionic libc(Android 的 C 庫,不是 glibc)
- Android sandbox + SELinux 限制
- 不同的動態連結器 (
/system/bin/linker64)
對 Flutter 官方來說:這不是他們支援的 OS。
Flutter SDK 裡的 engine binaries:
bin/cache/artifacts/engine/
├── darwin-arm64/ ← macOS 用
├── linux-arm64/ ← Linux (glibc) 用
└── android-arm64/ ← 這是 TARGET,不是 HOST!
❌ 沒有 Termux/bionic host 版本
我們從源碼交叉編譯了整個 Flutter Engine,專門為 Termux (Android/bionic) 環境打造:
- 修復 TLS 對齊問題(bionic linker 要求)
- 修復動態連結器路徑
- 編譯 host-side 工具(dart, gen_snapshot, impellerc)
- 讓 Hot Reload、APK 構建在 Termux 上原生運行
一句話:Flutter 官方支援 arm64 目標平台,但從不支援 Android 作為開發主機。我們補上了這個缺失。
本專案基於 mumumusuc/termux-flutter,實現了在 WSL (Windows Subsystem for Linux) 環境下為 Termux 交叉編譯 Flutter Engine 的完整解決方案。
| 項目 | 原專案 | 本專案 |
|---|---|---|
| 構建環境 | Linux / Termux 原生 | WSL (Windows) |
| Flutter 版本 | 3.29.2 | 3.41.5 |
| Android 兼容性 | ❌ 不支援 Android 14+ | ✅ 支援 Android 16 |
| 額外修復 | - | -llog, -lm 依賴 |
| 文檔 | 基礎 | 完整中文指南 |
✅ 已驗證:本專案已在 Android 16 設備上成功運行 Flutter 應用!
本專案是世界首個在 ARM64 Termux 上實現完整 Flutter 開發流程的解決方案!
| 功能 | 本專案 | 其他方案 |
|---|---|---|
flutter build apk |
✅ 原生支援 | ❌ 無法實現 |
flutter run + Hot Reload |
✅ 完整支援 | ❌ 無法實現 |
| 效能 | ✅ 原生速度 | |
| 安裝難度 | ✅ 一鍵安裝 | |
| APK 大小 | ✅ 正常 (~15MB) |
| 專案 | build apk | flutter run | hot reload | 原生運行 | 維護狀態 |
|---|---|---|---|---|---|
| 本專案 | ✅ | ✅ | ✅ | ✅ | ✅ 活躍 |
| Flutter 官方 | ❌ | ❌ | ❌ | ❌ | Issue #177936: 不支援 |
| mumumusuc/termux-flutter | ❌ | ❌ | ✅ | ||
| Hax4us/flutter_in_termux | ❌ | ❌ x86 模擬 | |||
| bdloser404/Fluttermux | ❌ | ❌ | ❌ | ❌ | ❌ 已失效 |
💡 如果你發現其他能原生支援的專案,歡迎開 Issue 告訴我們!
你可以在手機/平板上完成完整的 Flutter 開發:
📱 你的 Android 設備
↓
🖥️ Termux 終端
↓
✍️ 編寫程式碼 (vim/nano/code-server)
↓
🔥 flutter run → 即時看到變更 (Hot Reload!)
↓
📦 flutter build apk → 產出可安裝的 APK
↓
📲 直接安裝到設備上測試
不需要電腦、不需要模擬器、不需要雲端服務!
| 功能 | 狀態 | 說明 |
|---|---|---|
flutter doctor |
✅ 已驗證 | Dart SDK 正常運行 |
flutter create |
✅ 已驗證 | 可創建新專案 |
flutter run -d linux |
✅ 已驗證 | 需要 Termux:X11 |
flutter build linux |
✅ 已驗證 | 產出 ARM64 ELF 執行檔 |
flutter build apk |
✅ 已驗證 | 一鍵安裝已包含所有配置 |
flutter run (Android) |
✅ 已驗證 | Hot reload 支援!一鍵安裝已包含 |
✅ v3.41.5 正式版:所有功能已驗證可用!包含 hot reload 支援!
- 🪟 在 Windows WSL 環境下完成交叉編譯
- 🔧 修復了 Android 日誌符號缺失問題
- 📦 成功產出
flutter_3.41.5_aarch64.deb(662MB) - 🤖 完整的自動化構建流程
| 項目 | 最低需求 |
|---|---|
| Android 版本 | Android 11 (API 30) 或更高 |
| 架構 | ARM64 (aarch64) |
| Termux | 從 F-Droid 安裝 |
⚠️ 重要:Android SDK 中的adb需要 Android 11+ 的系統函數 (pthread_cond_clockwait)。在 Android 10 或更舊的設備上,需要額外步驟(見下方)。
🔧 Android 10 或更舊設備的 ADB 修復方法
如果你的設備是 Android 10 或更舊版本,termux-android-sdk 的 adb 會出現以下錯誤:
CANNOT LINK EXECUTABLE "adb": cannot locate symbol "pthread_cond_clockwait"
解決方案: 安裝 MasterDevX/Termux-ADB 並替換 adb:
# 1. 安裝舊版相容的 adb
wget https://github.com/MasterDevX/Termux-ADB/raw/master/InstallTools.sh -q && bash InstallTools.sh
# 2. 用相容版本替換 Android SDK 的 adb
cp $PREFIX/bin/adb.bin $PREFIX/opt/android-sdk/platform-tools/adb
# 3. 驗證
flutter doctor這會安裝 adb 1.0.39 (android-8.0.0),可在 Android 9 及更舊設備上運行。
一個命令安裝 Flutter + Android SDK + NDK,完成後直接可以 flutter build apk:
curl -sL https://raw.githubusercontent.com/ImL1s/termux-flutter-wsl/master/install_flutter_complete.sh -o ~/install.sh && bash ~/install.sh此腳本會自動安裝 Flutter、Android SDK、ARM64 NDK,並測試 APK 構建。 總大小約 1.8GB,需要 10-30 分鐘。
如果只需要 flutter run -d linux,不需要構建 APK:
curl -sL https://raw.githubusercontent.com/ImL1s/termux-flutter-wsl/master/install_termux_flutter.sh -o ~/install.sh && bash ~/install.sh安裝完成後,重啟 Termux 或執行:
flutter doctor此腳本只安裝 Flutter SDK (~550MB),不含 Android SDK。
# 1. 安裝基礎依賴
pkg update && pkg install x11-repo wget openjdk-21
# 2. 下載安裝包
wget https://github.com/ImL1s/termux-flutter-wsl/releases/download/3.41.5/flutter_3.41.5_aarch64.deb
# 3. 安裝
dpkg -i flutter_3.41.5_aarch64.deb
apt --fix-broken install -y
# 4. 執行 post-install 腳本(配置 APK 構建和 hot reload)
bash $PREFIX/share/flutter/post_install.sh
# 5. 載入環境並驗證
source $PREFIX/etc/profile.d/flutter.sh
flutter doctor
⚠️ 重要:post_install.sh會下載並配置必要的環境,包括:
- Android API 34 平台
- 官方 Dart SDK snapshots(hot reload 必需)
- Android cmdline-tools
- ELF 二進制清理(修復 linker warning)
最新版安裝腳本修復了多個關鍵問題,確保在乾淨 Termux 環境下所有功能正常:
| 修復項目 | 說明 |
|---|---|
| libc++_shared.so 符號連結 | 修正指向真實 ELF 庫而非 linker script,解決 ld.lld 崩潰問題 |
| Android build tools | 自動安裝 d8, dx, aidl, apksigner, googletest |
| android-tools | 自動安裝 adb 支援 flutter run |
| 依賴衝突處理 | 自動清理舊包避免 openjdk-17/21 衝突 |
| binutils | 安裝 ar 命令用於創建 libatomic.a stub |
| NDK clang | 移除不必要的 wrapper,ARM64 NDK 原生 clang 可直接使用 |
🔧 v14 修復的技術細節
libc++_shared.so 問題:
NDK 每個 API level 目錄下的 libc++.so 實際上是一個 linker script:
INPUT(-lc++_shared)
之前錯誤地將 libc++_shared.so 指向這個 linker script,導致 ld.lld 在解析時崩潰(Segmentation fault)。
修正後,libc++_shared.so 正確指向父目錄的真實 ELF 共享庫:
# 正確的符號連結
libc++_shared.so -> ../libc++_shared.so # 指向真實的 ELF 庫NDK clang wrapper 移除:
ARM64 版 NDK (lzhiyong/termux-ndk) 自帶的 clang-18 已經是 ARM64 原生二進制,可直接運行,不需要 Termux clang wrapper。使用原生 NDK clang 可避免版本不匹配問題。
# 一鍵構建
./build_termux_flutter.sh
# 或分步驟執行
python3 build.py sysroot --arch=arm64 # 組裝 Termux 運行時依賴
python3 build.py configure --arch=arm64 --mode=debug
python3 build.py build --arch=arm64 --mode=debug
python3 build.py debuild --arch=arm64 # 打包 .deb安裝完成後,你需要 Termux:X11 來顯示 GUI 應用。
安裝 Termux:X11:從 GitHub Releases 或 F-Droid 下載 APK 安裝。
# 1. 在 Termux 中啟動 X11 服務
export DISPLAY=:0
termux-x11 :0 >/dev/null 2>&1 &
# 2. 打開 Termux:X11 App (會顯示黑色畫面,這是正常的)
# 3. 創建並運行 Flutter 專案
flutter create hello_termux
cd hello_termux
flutter run -d linux💡 備選方案:如果 X11 設置困難,也可以用 Web 模式預覽:
flutter run -d web-server --web-port=8080然後在瀏覽器打開
http://localhost:8080
✅ 已驗證可用:APK 構建功能已在 ARM64 設備上驗證成功!(2026-03-25)
如果你使用 install_flutter_complete.sh 一鍵安裝,所有環境已配置完成,可直接構建 APK。
手動安裝 deb 的用戶需要額外配置 Android SDK。
如果你使用了上方的 install_flutter_complete.sh 一鍵安裝,APK 構建環境已經完全配置好:
# 直接創建專案並構建
flutter create myapp
cd myapp
flutter build apk --release首次構建約需 3-5 分鐘(下載 Gradle 依賴)
展開手動安裝步驟
# 更新套件並安裝 JDK
pkg update
pkg install openjdk-21 git wget從 termux-android-sdk 下載並安裝:
wget https://github.com/mumumusuc/termux-android-sdk/releases/download/35.0.0/android-sdk_35.0.0_aarch64.deb
dpkg -i --force-architecture android-sdk_35.0.0_aarch64.deb
⚠️ 注意:需要--force-architecture參數,因為 dpkg 將aarch64和arm64視為不同架構。
此套件包含 ARM64 原生的
aapt2、build-tools 35.0.0、platforms android-34/35等必要工具。
# 加入 ~/.bashrc 或 ~/.zshrc
export ANDROID_HOME=$PREFIX/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin
# 重要:不要設置 JAVA_HOME,讓 Gradle 自動從 PATH 找到 Java
# 如果已設置,請取消:
unset JAVA_HOME重新載入設定:
source ~/.bashrc# 設定 Android SDK 路徑
flutter config --android-sdk $ANDROID_HOME
# 接受 Android 授權
flutter doctor --android-licenses
# 檢查環境
flutter doctor官方 Android NDK 只提供 x86_64 Linux 主機版本,無法在 ARM64 Termux 上運行。需要安裝第三方預編譯的 ARM64 NDK:
# 下載 ARM64 NDK(約 538MB)
cd ~
wget https://github.com/lzhiyong/termux-ndk/releases/download/android-ndk/android-ndk-r27b-aarch64.zip
# 解壓到 Android SDK 的 NDK 目錄
mkdir -p $ANDROID_HOME/ndk
unzip android-ndk-r27b-aarch64.zip -d $ANDROID_HOME/ndk/
# 重命名為標準版本號(Flutter 需要)
mv $ANDROID_HOME/ndk/android-ndk-r27b $ANDROID_HOME/ndk/27.1.12297006
# 驗證安裝
ls $ANDROID_HOME/ndk/27.1.12297006/toolchains/llvm/prebuilt/linux-aarch64/bin/clang✅ 已驗證:ARM64 NDK 包含完整的
linux-aarch64工具鏈,clang 18.0.2 可正常運行。
💡 來源:lzhiyong/termux-ndk - 提供 ARM64 預編譯的 Android NDK。
Android SDK 和 Gradle 下載的部分工具是 x86_64 版本,無法在 ARM64 Termux 上運行。需要替換為 ARM64 版本:
# 安裝 Termux 的 cmake 和 ninja
pkg install cmake ninja
# 修復 CMake(Android SDK 的 CMake 是 x86_64)
# 首次構建時會下載 CMake,之後執行以下命令:
rm -rf $ANDROID_HOME/cmake/*/bin
mkdir -p $ANDROID_HOME/cmake/3.22.1/bin
ln -s $PREFIX/bin/cmake $ANDROID_HOME/cmake/3.22.1/bin/cmake
ln -s $PREFIX/bin/ninja $ANDROID_HOME/cmake/3.22.1/bin/ninjaGradle 下載的 AAPT2 是 x86_64 版本,需要替換為 SDK build-tools 中的 ARM64 版本:
# 首次構建後,找到 Gradle 緩存的 aapt2 位置並替換
# 路徑格式:~/.gradle/caches/*/transforms/*/transformed/aapt2-*-linux/aapt2
find ~/.gradle/caches -name "aapt2" -path "*/aapt2-*-linux/*" 2>/dev/null | while read f; do
rm -f "$f"
ln -s $ANDROID_HOME/build-tools/35.0.0/aapt2 "$f"
echo "Fixed: $f"
done
⚠️ 注意:不要使用$PREFIX/bin/aapt2,Termux 的 aapt2 版本 (2.19) 太舊,無法讀取新版 android.jar。 必須使用 SDK build-tools 中的 ARM64 版本:$ANDROID_HOME/build-tools/35.0.0/aapt2
flutter build apk --release 需要 product 版本的 SDK:
FLUTTER_ROOT=$PREFIX/opt/flutter
mkdir -p $FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk_product
cp -r $FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk/* \
$FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk_product/在專案的 android/local.properties 中添加 NDK 路徑:
cd your_flutter_project
echo "ndk.dir=$ANDROID_HOME/ndk/27.1.12297006" >> android/local.properties在 android/app/build.gradle.kts 中指定 NDK 版本(找到 ndkVersion 行並修改):
android {
ndkVersion = "27.1.12297006" // 替換原來的 flutter.ndkVersion
// ... 其他設定
}# 創建專案
flutter create myapp
cd myapp
# 構建 Release APK(無需額外參數!)
flutter build apk --release✨ 無需
--target-platform參數!我們已修改 Flutter SDK 預設值,自動只編譯
android-arm64架構。 這是因為 android-arm 和 android-x64 的 gen_snapshot 無法在 ARM64 上交叉編譯。💡 影響範圍:產出的 APK 只能在 ARM64 設備上運行。大多數現代 Android 設備(2019 年後)都是 ARM64。
📝 技術限制詳細分析(2026-01-07 測試)
我們嘗試編譯了 android-arm 和 android-x64 的 gen_snapshot,結果如下:
| 目標 | 結果 | 錯誤原因 |
|---|---|---|
| android-arm64 | ✅ 成功 | Host=ARM64, Target=ARM64,相同架構 |
| android-arm | ❌ 失敗 | BoringSSL 在 32-bit 有 shift 溢出錯誤(r0 << 63 在 32-bit 型別上) |
| android-x64 | ❌ 失敗 | ARM64 sysroot 標頭檔與 x64 編譯不相容 |
根本原因:Flutter Engine 的 GN 建構系統假設 host 和 target 是相容的架構。當需要:
- Host = ARM64(gen_snapshot 執行的地方)
- Target = ARM32 或 x64(gen_snapshot 產生程式碼的目標)
建構系統無法正確分離 host toolchain 和 target compilation,導致依賴庫使用錯誤的架構設定編譯。
這也是為什麼 Flutter 官方不支援 ARM64 host 的原因之一。
✅ 已驗證:使用上述配置,
flutter build apk --release已在 Termux 上成功運行!輸出示例:
Running Gradle task 'assembleRelease'... 230.4s ✓ Built build/app/outputs/flutter-apk/app-release.apk (~14.6MB)
🔧 完整的首次構建流程
由於部分工具需要在首次構建時下載,建議按以下順序操作:
# 1. 創建專案
flutter create myapp
cd myapp
# 2. 配置 NDK 版本
echo "ndk.dir=$ANDROID_HOME/ndk/27.1.12297006" >> android/local.properties
sed -i 's/ndkVersion = flutter.ndkVersion/ndkVersion = "27.1.12297006"/g' android/app/build.gradle.kts
# 3. 首次構建(會失敗,但會下載必要工具)
flutter build apk --release 2>&1 || true
# 4. 修復 CMake
rm -rf $ANDROID_HOME/cmake/*/bin
mkdir -p $ANDROID_HOME/cmake/3.22.1/bin
ln -s $PREFIX/bin/cmake $ANDROID_HOME/cmake/3.22.1/bin/cmake
ln -s $PREFIX/bin/ninja $ANDROID_HOME/cmake/3.22.1/bin/ninja
# 5. 修復 AAPT2
find ~/.gradle/caches -name "aapt2" -path "*/aapt2-*-linux/*" 2>/dev/null | while read f; do
rm -f "$f"
ln -s $ANDROID_HOME/build-tools/35.0.0/aapt2 "$f"
done
# 6. 複製 flutter_patched_sdk_product
FLUTTER_ROOT=$PREFIX/opt/flutter
mkdir -p $FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk_product
cp -r $FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk/* \
$FLUTTER_ROOT/bin/cache/artifacts/engine/common/flutter_patched_sdk_product/
# 7. 再次構建(應該成功)
flutter build apk --release在 Termux 中直接運行 Flutter app 並支援 hot reload:
# 1. 啟用無線調試
# 設定 → 開發者選項 → 無線調試 → 開啟
# 2. 配對設備(首次需要)
# 點擊「使用配對碼配對設備」,記下配對碼和端口
adb pair 127.0.0.1:<配對端口>
# 輸入配對碼
# 3. 連接設備
adb connect 127.0.0.1:<連接端口>
# 4. 運行 Flutter app
cd your_flutter_project
flutter run💡 連接成功後會顯示:
Flutter run key commands. r Hot reload. 🔥🔥🔥 R Hot restart.
方法 A:無線 ADB(同一台手機)
- 開啟手機的「開發者選項」→「無線偵錯」
- 點擊「使用配對碼配對裝置」,記下配對碼和端口
# 配對(只需一次)
adb pair 127.0.0.1:<配對端口>
# 輸入配對碼
# 連接
adb connect 127.0.0.1:<連接端口>方法 B:連接其他設備
# 確保目標設備已開啟 USB 偵錯或無線偵錯
adb connect <設備IP>:5555# 查看已連接設備
flutter devices
# 部署到 Android 設備
flutter run -d <device_id>
# 或直接安裝 APK
adb install build/app/outputs/flutter-apk/app-release.apk
⚠️ 注意:flutter devices預設只顯示linux。安裝termux-android-sdk後才會出現 Android 設備選項。
termux-flutter-wsl/
├── build.py # 主構建腳本
├── build.toml # 構建配置
├── patches/ # 引擎補丁
├── build_termux_flutter.sh # 一鍵構建腳本 (WSL)
├── install_termux_flutter.sh # Termux 一鍵安裝腳本
├── setup_flutter_project.sh # 專案配置腳本
├── README.md # 中文文檔
├── README_EN.md # 英文文檔
├── assets/ # 專案資源
└── .agent/workflows/ # 自動化工作流
| 項目 | 版本/配置 |
|---|---|
| Host OS | Windows 11 + WSL (Ubuntu 22.04+) |
| Target | ARM64 Android (Termux) |
| NDK | r27d (API 35) |
| Python | 3.10+ |
我們在原版基礎上做了以下修正以解決 WSL 環境的兼容問題:
# build/config/termux/BUILD.gn - runtime_library
ldflags = [
"-stdlib=libstdc++",
"-Wl,--warn-shared-textrel",
"-llog", # 新增:Android 日誌庫
"-lm", # 新增:數學庫
]為了支援在 Termux 上執行 flutter build apk --release(AOT 編譯),我們交叉編譯了專用的 gen_snapshot:
# 在 WSL 中構建(開發者使用)
python3 build.py configure_android --arch=arm64 --mode=release
python3 build.py build_android_gen_snapshot --arch=arm64 --mode=release這個 gen_snapshot 的特點:
- 運行在 ARM64 Termux 上
- 產生 Android ARM64 AOT 機器碼
- 已包含 在
flutter_3.41.5_aarch64.deb安裝包中
✅ 已驗證:gen_snapshot 在 Termux 上成功運行:
$ gen_snapshot --version Dart SDK version: 3.11.3 on "android_arm64"
技術說明:官方 Flutter SDK 的 gen_snapshot 只能在 x86_64 Linux 上運行。我們使用 NDK 交叉編譯了一個能在 ARM64 Android (Termux) 上原生運行的版本,這是實現 flutter build apk 的關鍵。
錯誤訊息:
CMake Error: The CMAKE_C_COMPILER is not a full path to an existing compiler tool.
原因:Gradle 在構建時下載了新的 NDK 版本,但 post_install.sh 在 NDK 下載之前已經運行過,導致 clang wrapper 沒有被創建。
解決方案:重新運行 post_install.sh 來配置所有 NDK:
bash $PREFIX/share/flutter/post_install.sh
flutter build apk --release錯誤訊息:
Unsupported file type "notFound" for libflutter_linux_gtk.so
原因:deb 包中缺少 Linux GTK 庫。
解決方案:這是構建問題,需要重新構建 deb 包並確保 flutter_gtk 目標已啟用。如果你是用戶,請下載最新版本的 deb 包。
警告訊息:
WARNING: linker: Warning: unused DT entry: DT_RPATH
原因:ELF 二進制文件包含不必要的 DT_RPATH 條目。
解決方案:這個警告不影響功能,但可以通過 termux-elf-cleaner 清除:
pkg install termux-elf-cleaner
termux-elf-cleaner $PREFIX/opt/flutter/bin/cache/dart-sdk/bin/dart錯誤訊息:
aapt2: cannot execute: required file not found (or) EM_X86_64
原因:Gradle 下載的 aapt2 是 x86_64 版本,無法在 ARM64 上運行。
解決方案:
# 方法 1: 在 gradle.properties 中指定 ARM64 aapt2
echo "android.aapt2FromMavenOverride=$PREFIX/bin/aapt2" >> android/gradle.properties
# 方法 2: 替換 Gradle 緩存中的 aapt2
find ~/.gradle/caches -name "aapt2" -path "*aapt2-*-linux*" | while read f; do
rm -f "$f"
ln -s $PREFIX/bin/aapt2 "$f"
done- 修改
build.toml中的tag為新版本號 - 執行同步與補丁:
python3 build.py clone python3 build.py sync python3 build.py patch_engine # 如失敗需更新補丁文件 - 執行完整構建流程
本專案是 mumumusuc/termux-flutter 的 Fork。要獲取上游更新:
git remote add upstream https://github.com/mumumusuc/termux-flutter.git
git fetch upstream
git merge upstream/main注意:由於我們為 WSL 修改了部分構建腳本,合併時可能會發生衝突,請手動解決。
- mumumusuc/termux-flutter - 原始構建工具
- lzhiyong/termux-ndk - ARM64 預編譯 Android NDK
- Flutter - Google 的 UI 框架
- Termux - Android 終端模擬器
本專案基於 mumumusuc/termux-flutter,採用 GPL-3.0 協議開源。
詳見 LICENSE

