Перейти к содержанию

Бинарник 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 и родственные платформы) скачивают и передают дальше — часто не глядя, что «внутри» дистрибуции. Статья отвечает на вопросы:

  1. Чем подтверждается целостность скачанного файла?
  2. Под какой лицензией распространяется сам upstream и что это означает для того, кто передаёт бинарник дальше?
  3. Что известно о лицензиях зависимостей — и чего не известно?

Статья не заменяет 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-находки прямо помечены как требующие человеческой проверки.

Требования

  • gh CLI, авторизованный с правом чтения релизов; 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-256 3972dc97…, байт-в-байт равен 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 репозитория сборки.

Связанные материалы