Бинарник Mihomo для MIPSel: контрольные суммы, лицензия и состав зависимостей¶
Статус: Confirmed (фактические проверки артефактов релиза и файлов
upstream выполнены 2026-10-10: SHA-256 бинарника, текст лицензии upstream на
каждом использованном теге, состав модулей из build-info, лицензионные файлы
зависимостей) + Observed (лицензионная композиция 112 модулей графа сборки
v1.19.32; публикация уведомлений на v1.19.32 и успешный
исторический backfill v1.19.24–v1.19.31 (2026-10-10 UTC):
все 9 релизов имеют по пять assets, исходные бинарники не заменены) +
Research (юридическая оценка copyleft-индикаторов не выполнена; поведение
механизма на будущих новых версиях upstream не проверялось)
Область применения: понимание того, что фактически опубликовано вместе с
готовым MIPSel-бинарником Mihomo сегодня, как сверить его целостность, какие
факты известны о лицензиях upstream и зависимостей и какие вопросы остаются
открытыми перед распространением бинарника дальше
Проверено на: релиз mipsel-v1.19.32 репозитория
saymer-alt/mihomo-auto-build
(скачанный артефакт сверен с SHA-256; из бинарника извлечена Go build-info;
исходники 111 зависимостей загружены с module proxy и прочитаны по реальным
лицензионным файлам); LICENSE-файлы upstream сверены на тегах
v1.19.24…v1.19.32 и main
Последняя проверка: 2026-10-11 (состояние релизов через GitHub API; исходный аудит v1.19.32 — 2026-10-10)
Source of truth: код и workflow репозитория mihomo-auto-build
(ветка main, PR #12 слит); upstream
MetaCubeX/mihomo на теге v1.19.32;
вывод go version -m опубликованного бинарника
Provenance: оригинальная статья, написана по результатам технического
аудита 2026-10-10 (issue #8,
PR #10 — слит,
#12 — слит);
исправлено по итогам независимого документационного ревью
Что решаем¶
Готовый MIPSel-бинарник (MT7621 и родственные платформы) скачивают и передают дальше — часто не глядя, что «внутри» дистрибуции. Статья отвечает на вопросы:
- Чем подтверждается целостность скачанного файла?
- Под какой лицензией распространяется сам upstream и что это означает для того, кто передаёт бинарник дальше?
- Что известно о лицензиях зависимостей — и чего не известно?
Статья не заменяет README репозитория сборки и не описывает установку на
роутер — для этого есть
keenetic-auto-setup.
Контекст¶
- Сборка выполняется в GitHub Actions из точного upstream-тега
(
git clone --branch v1.19.32), кросс-компиляцияGOOS=linux GOARCH=mipsle GOMIPS=softfloat. - Go-бинарник содержит встроенную build-info: список модулей графа сборки с
версиями (
go version -m). Это список модулей графа, а не доказательство того, что код каждого модуля слинкован в бинарник; для лицензионного обзора такой список используется консервативно, с заведомым перехватом. - Фактический состав релизов после исторического backfill 2026-10-10:
все девять выпусков
v1.19.24–v1.19.32содержат по пять assets (бинарник,.sha256, точный GPL-3.0.LICENSE,THIRD_PARTY_LICENSESиTHIRD_PARTY_NOTICES). Исходные восемь исторических бинарников сохранены без изменений ID, размера и SHA-256. Лицензионная полнота соответствующего исходного кода и применимость copyleft остаются открытыми.
Как это работает¶
Целостность. Публикация — конечный автомат с запретом перезаписи
здорового бинарника: состояние релиза классифицируется (build /
checksum / complete), sidecar сверяется байт-в-байт с ожидаемой строкой
<sha256> <binary>, дайджест каждого asset — против локального содержимого.
Повторный запуск публикации на полном релизе — no-op (подтверждено тестами
кода).
Лицензия upstream. Проверка LICENSE-файлов upstream на всех тегах,
использованных опубликованными релизами (v1.19.24…v1.19.32), и на main
показала одно и то же: GNU GPL версии 3 (канонический текст FSF, 35 149
байт). Ранние описания «MIT, Copyright 2023 KT» в документации репозитория
сборки были неверны и исправлены в PR #12. Это важно для всех, кто передаёт
бинарник дальше: GPL-3.0 требует сопровождать распространение текстом
лицензии, указанием авторских прав и предложением полного соответствующего
исходного кода (для этих сборок — исходники upstream-тега плюс скрипты
сборки репозитория). Выполнение этих обязанностей для опубликованных
релизов — открытый вопрос issue #8, а не свершившийся факт.
Состав зависимостей. Список модулей графа сборки для v1.19.32
извлечён из build-info бинарника: 111 зависимостей с учётом
replace-директив (например, google.golang.org/protobuf заменён на форк
github.com/metacubex/protobuf-go — исходники фактически берутся из
модуля-замены). Скрипт scripts/collect_upstream_licenses.py (PR #12 слит)
скачивает исходники каждого модуля с module proxy по закреплённой
версии и читает реальные лицензионные файлы. Классификация — эвристика по
содержимому; она не является юридическим заключением, а copyleft-находки
прямо помечены как требующие человеческой проверки.
Требования¶
ghCLI, авторизованный с правом чтения релизов;go— только для самостоятельного воспроизведения списка модулей.- Никаких прав на роутер или VPS: всё проверяется локально.
Проверка¶
Целостность скачанного релиза (номер версии подставьте свой):
gh release view mipsel-v1.19.32 -R saymer-alt/mihomo-auto-build \
--json assets -q '.assets[] | "\(.name) \(.digest)"'
sha256sum mihomo-linux-mipsel-softfloat-v1.19.32
Ожидаемо: локальная сумма совпадает с полем digest (для v1.19.32 это
подтверждено 2026-10-10) и со строкой в *.sha256, если он опубликован.
Состав модулей графа сборки, вшитый в бинарник:
go version -m mihomo-linux-mipsel-softfloat-v1.19.32
Лицензия конкретного upstream-тега:
curl -s https://raw.githubusercontent.com/MetaCubeX/mihomo/v1.19.32/LICENSE | head -3
Типичные проблемы¶
SHA-256 не сходится¶
Файл скачан не полностью или подменён. Сверяйте не с текстом на странице, а
с полем digest через API (GitHub считает его на своей стороне) и с
sidecar-файлом; оба должны совпасть между собой и с локальной суммой.
В релизе нет .sha256, .LICENSE или notice-файлов¶
На момент проверки 2026-10-11 во всех девяти выпусках
v1.19.24–v1.19.32 эти файлы уже присутствуют.
Если файл отсутствует в локальной загрузке, проверьте именно нужный
GitHub Release,
его список assets и контрольную сумму. Исторический backfill был
выполнен через отдельные plan → publish с проверкой неизменности
бинарников; повторно публиковать или заменять исправные assets не нужно.
Что подтверждено, а что нет¶
Confirmed (2026-10-10):
- SHA-256 скачанного артефакта
mipsel-v1.19.32совпадает с дайджестом релиза (0af50ded…). - LICENSE-файл upstream на тегах
v1.19.24…v1.19.32иmain— GPL-3.0 (канонический текст FSF); после публикации backfill 2026-10-10 все девять релизов содержат.sha256,.LICENSEи оба notice-файла (подтверждено повторным чтением GitHub API 2026-10-11). - Из build-info бинарника извлечено 111 модулей графа сборки;
replace-директивы разрешаются в фактические источники. - Лицензионные файлы всех 111 зависимостей прочитаны; по эвристической классификации нераспознанных нет.
Observed:
- Реальная публикация на релизе
v1.19.32(2026-10-10): workflow в режимеcompleteприложил.LICENSE(35 149 байт, SHA-2563972dc97…, байт-в-байт равен LICENSE тегаv1.19.32),THIRD_PARTY_LICENSES-v1.19.32.txt(14 349 байт,c1f038da…) иTHIRD_PARTY_NOTICES-v1.19.32.txt(562 849 байт,88d7d18f…); бинарник и.sha256не изменились (ID, размер, дайджест сверены до и после); повторный прогон workflow не внёс изменений. Сводка, сгенерированная CI, байт-в-байт совпала с независимой локальной регенерацией. - Исторический backfill:
все восемь версий
v1.19.24–v1.19.31прошли read-only audit 8/8, а затем отдельные успешныеplanиpublish. Добавлены 32 недостающих sidecar/notice assets; API-сверка до/после не обнаружила замену бинарников. Для каждого выпуска используются собственные build-info и уведомления. - Лицензионная композиция зависимостей
v1.19.32: преобладают BSD-3-Clause, MIT и Apache-2.0; присутствуют MPL-2.0, LGPL-2.1/3.0 и компоненты с индикаторами GPL-3.0 / GPL-3.0-or-later (семействоmetacubex/sing*,mieru,randv2и др.) — суммарно 19 зависимостей с copyleft-индикаторами, плюс сам upstream под GPL-3.0.
Still research / unknown:
- Не выполнена юридическая оценка того, какие обязательства влекут copyleft-индикаторы зависимостей и GPL-3.0 upstream при конкретных сценариях передачи бинарника (эвристическая классификация и наличие текста лицензии сами по себе их не закрывают).
- Не установлено, какие именно части графа модулей слинкованы в бинарник; обзор намеренно перехватывает шире.
- Поведение механизма уведомлений на новых версиях upstream (build-режим, свежие зависимости) не проверялось; подтверждён только режим существующего релиза.
Источники и provenance¶
- project code:
saymer-alt/mihomo-auto-build(scripts/release_assets.py,scripts/release_license.py,scripts/collect_upstream_licenses.py,scripts/release_notices.py), веткаmain(PR #12 слит) на 2026-10-10; - upstream code:
MetaCubeX/mihomo@v1.19.32(LICENSE,go.mod,go.sum; LICENSE сверены и на остальных использованных тегах); - артефакт: релиз
mipsel-v1.19.32(проверен SHA-256 и build-info); - module proxy:
proxy.golang.org— исходники всех 111 зависимостей по закреплённым версиям; - связанные задачи: issue #8 и PR #10/#12 репозитория сборки.
Связанные материалы¶
- Mihomo на Keenetic: архитектура — как этот бинарник встраивается в маршрутизацию роутера.
- Основы Keenetic и Entware — куда попадает бинарник при установке через Entware.