Допустимые cask
Некоторые cask не следует добавлять в homebrew/cask. Однако есть и другие интересные tap и форки, и каждый может создать собственный!
- Где разместить свой cask
- Приложения со встроенным вредоносным ПО
- Исключения из требования к известности
- Обычно не форк
- Homebrew Cask — не сервис для поиска новых приложений
- Отклонённые cask
Где разместить свой cask
Мы используем следующие термины:
- Стабильная версия: последняя версия, которую разработчик обозначил как стабильную.
- Бета-, разрабатываемая, нестабильная версия: версии, следующие за стабильной, но ещё незавершённые и находящиеся в разработке, которые должны со временем стать новой стабильной версией. Сюда также относятся альтернативные версии, предназначенные специально для разработчиков.
- Ночная версия: постоянно обновляемая версия текущего состояния разработки.
- Устаревшая версия: любая стабильная версия, которая не является самой новой.
- Региональная, локализованная версия: любая версия не на американском английском, если такая версия существует.
- Пробная версия: версия с ограниченным сроком действия, которая полностью перестаёт работать после его истечения; чтобы снять ограничение, требуется оплата.
- Freemium-версия: бесплатная версия, которая работает бессрочно, но имеет ограничения, которые можно снять за плату.
- Форк: альтернативная версия существующего проекта с исходным кодом и бинарным файлом, основанными на оригинале, но изменёнными.
- Неофициальная сборка: предположительно неизменённый скомпилированный бинарный файл, созданный третьей стороной, если владелец исходного кода не выпускал собственной сборки.
- Сборка без сайта разработчика: бинарный файл, распространяемый не через официальный сайт, например в публикации на форуме.
- Сборка с ограниченным доступом: сборка, URL-адрес которой находится за формой входа или регистрации, а хост отличается от хоста главной страницы.
- Шрифт: файл данных, содержащий набор глифов, символов или знаков, изменяющий вводимый текст.
Стабильные версии
Стабильные версии размещаются в основном репозитории Homebrew/homebrew-cask. Они должны работать в последней основной версии macOS.
Cask, которым требуется requires_rosetta, всё ещё допустимы, пока последняя основная версия macOS поддерживает Rosetta 2 для обеспечения совместимости с обычными приложениями. В документации Apple о переходе на Rosetta 2 говорится, что эта поддержка сохранится до macOS 27 включительно, а после этого останется лишь более узкий набор возможностей для старых игр. Поэтому мы ожидаем, что перестанем принимать новые cask requires_rosetta, когда macOS 27 станет последней стабильной версией macOS.
Если Apple будет придерживаться этого графика, существующие cask requires_rosetta, как ожидается, будут объявлены устаревшими, пока актуальной будет macOS 27, а после выхода macOS 28 в качестве последней стабильной версии macOS будут отключены или удалены.
Бета-, нестабильные, разрабатываемые, ночные или устаревшие версии
Эти версии также размещаются в основном репозитории Homebrew/homebrew-cask. В имени файла и токене должны быть указаны @beta, @nightly и т. д., чтобы отличать их от стабильных версий.
Региональные и локализованные версии
Если приложение существует на нескольких языках или имеет разные региональные версии, для переключения между языками или регионами следует использовать stanza language.
Пробные и freemium-версии
Прежде чем отправлять пробную версию, убедитесь, что её можно превратить в полнофункциональную без повторной загрузки. Если приложение предлагает пробную версию, но приобрести полную можно только через Mac App Store, ему не место ни в одном из официальных репозиториев. Freemium-версии допустимы.
Форки и приложения с совпадающими названиями
В имени файла cask и его токене у форка перед названием должен стоять префикс с именем разработчика. Даже если исходное ПО снято с поддержки, форки должны соблюдать это правило, чтобы не вводить пользователей в заблуждение. Есть два исключения, позволяющих форку заменить основной cask:
- Разработчики снятого с поддержки оригинального ПО рекомендуют этот форк.
- Форк настолько популярен, что обошёл оригинал и фактически стал основным проектом, который приходит людям на ум при упоминании этого названия.
Если название совпадает у не связанных между собой приложений, то самое популярное из них (обычно уже представленное) остаётся без префикса. Поскольку это может быть субъективным решением, если вы с ним не согласны, создайте issue и объясните свою позицию сопровождающим.
Неофициальные сборки, сборки без сайта разработчика и сборки с ограниченным доступом
Мы не принимаем такие cask, поскольку они сопряжены с повышенным риском для безопасности.
Приложения со встроенным вредоносным ПО
К сожалению, в мире программного обеспечения встречаются злоумышленники, которые распространяют вредоносное ПО вместе со своими приложениями. Несмотря на это, Homebrew Cask давно решил не выступать активным контролёром (в macOS уже есть такой механизм), а пользователи должны знать о программном обеспечении, которое устанавливают. Это значит, что мы не всегда будем удалять cask со ссылками на такие приложения, в частности потому, что чёткой границы между полезным приложением, потенциально нежелательной программой и разными видами вредоносного ПО не существует: то, что полезно одному пользователю, другой может счесть вредоносным.
И всё же мы хотели бы, чтобы пользователи имели некоторую защиту, сводя к минимуму случаи, когда добросовестных разработчиков объявляют распространителями вредоносного ПО. Для этого мы рассматриваем каждый cask отдельно, и любой пользователь может сообщить нам о возможном случае распространения вредоносного ПО. Однако важно всегда помнить: последняя линия защиты — это сам пользователь.
Если приложение со встроенным вредоносным ПО не подписано Apple Developer ID, а вы намеренно отключили или обошли Gatekeeper, мы не будем предпринимать никаких действий. Отключая функции безопасности, вы делаете это на свой страх и риск. Однако если приложение со встроенным вредоносным ПО подписано, Apple может отозвать его разрешения, и оно перестанет запускаться на компьютерах пользователей, которые не отключают функции безопасности, — это пойдёт на пользу всем, независимо от того, пользуются они Homebrew Cask или нет. Чтобы сообщить о подписанном приложении со встроенным вредоносным ПО, воспользуйтесь Feedback Assistant от Apple.
Мы также готовы удалить cask, если считаем, что есть достаточно доказательств вредоносности приложения. Чтобы предложить удалить cask, отправьте pull request с его удалением и обоснованием. Обычно для этого потребуется предоставить результаты проверки приложения с помощью VirusTotal, показывающие, что оно вредоносно; в идеале — с дополнительными сведениями, подтверждающими, что это не ложное срабатывание.
Кроме того, из репозитория может быть удалено ПО, у которого есть как «чистая», так и заражённая вредоносным ПО версия, даже если мы можем получить доступ к хорошей версии, — если разработчики побуждают пользователей устанавливать плохую. Мы поступаем так, потому что в подобных случаях существует повышенный риск того, что обе версии уже скомпрометированы или вскоре будут скомпрометированы тем или иным образом.
Если cask, от которого вы зависите, был удалён в соответствии с этими правилами, не беспокойтесь. Удаление cask из официальных репозиториев означает, что мы не будем его поддерживать, но вы можете делать это самостоятельно, разместив собственный tap.
Исключения из требования к известности
Cask, не достигающие минимального порога известности (см. раздел «Отклонённые cask»), не принимаются в основные репозитории, поскольку дополнительные затраты на сопровождение не оправданы низким ожидаемым числом пользователей. Эта проверка известности автоматически выполняется предоставляемыми нами командами аудита, но её решения не окончательны. Cask, не прошедший проверку на известность, можно добавить, если он:
- Представляет собой популярное приложение с собственным сайтом, бинарные файлы которого разработчики размещают на GitHub. Такой репозиторий может быть недостаточно известным, но само приложение — достаточно.
- Отправлен сопровождающим или активным участником проекта. Важная причина введения требования к известности заключается в том, что непопулярное ПО привлекает меньше внимания, а его cask забрасывают, он устаревает и перестаёт работать. Человек, который доказал свою заинтересованность в Homebrew Cask, с меньшей вероятностью допустит такое с ПО, от которого зависит.
- Является программой, недавно выпущенной с большой шумихой: о ней пишут в Twitter и Hacker News, и мы уже получили несколько преждевременных заявок на добавление. Очевидно, что такое приложение быстро достигнет нужного порога, поэтому мы не закроем PR сразу (но можем подождать с его слиянием).
Обратите внимание, что ни одно из этих исключений не гарантирует добавления; это лишь примеры ситуаций, когда мы можем пересмотреть решение.
Обычно не форк
Мы не будем добавлять новые cask для форков, если не выполняется хотя бы одно из следующих условий:
- форк объявлен официальным преемником в исходном репозитории (например, в README) или оригинальным автором способом, который можно проверить публично (например, в комментарии к issue или pull request);
- форк используется в качестве замены как минимум в двух других крупных дистрибутивах (например, Debian, Fedora, Arch, Gentoo, но не в небольших и малоиспользуемых дистрибутивах Linux).
Форк по-прежнему должен отвечать всем остальным требованиям к допустимым cask (включая, например, требования к популярности и самостоятельной подаче заявки).
Вместо замены оригинального cask форком можно добавить новый cask. Например, если MikeMcQuaid создал форк google-chrome, и тот стал очень популярным, то cask для mikemcquaid-google-chrome может быть уместен.
Homebrew Cask — не сервис для поиска новых приложений
С момента появления Homebrew Cask к этой категории относились самые разные запросы. Несмотря на некоторую популярность таких просьб, после тщательного рассмотрения мы каждый раз приходили к одному и тому же выводу: мы не являемся сервисом для поиска новых приложений, и пользователи должны иметь разумное представление о приложениях, которые собираются устанавливать с нашей помощью. Например, группировка cask по категориям не входит в задачи проекта.
Помимо прочего, Homebrew Cask не может устойчиво справляться с организацией таких запросов. Прежде чем отправлять запрос такого рода, изучите предыдущие связанные issues и все issues, на которые в них ссылаются, чтобы понять, почему это так, почему аргументы в духе «но проект x делает y» здесь неприменимы и почему не все менеджеры пакетов устроены одинаково.
Вы также должны уметь предложить чёткие и конкретные решения этих проблем. Если вы просто попросите о чём-либо, не предложив решений, ваш issue будет закрыт.
Однако между поиском новых приложений, о которых вы не знали, и поиском уже известного вам приложения, которое вы хотите установить, есть разница. Первое вряд ли когда-либо станет одной из наших целей, а второе для нас действительно важно, и мы продолжаем работать над его улучшением.
Отклонённые cask
Перед отправкой cask в любой из наших репозиториев необходимо прочитать документацию о допустимых cask и хотя бы бегло поискать, не пытались ли уже добавить его раньше.
Распространённые причины полного отклонения cask:
- Приложение не запускается с включённым GateKeeper в поддерживаемых Homebrew версиях macOS и на поддерживаемых платформах (например, неподписанные приложения не запускаются на Mac с Apple Silicon).
- Приложение слишком малоизвестно. Примеры:
- Приложение из репозитория кода, который недостаточно известен (менее 30 форков, 30 наблюдателей и 75 звёзд).
- Для самостоятельно отправленных cask, автор PR которых владеет репозиторием, действуют более высокие пороговые значения (менее 90 форков, 90 наблюдателей и 225 звёзд).
- Программное обеспечение для электронной идентификации (eID).
- Для установки и/или использования приложения требуется отключить SIP.
- Установщик приложения —
pkg, которому требуетсяallow_untrusted: true. - Приложение является пробной версией, а получить полную версию можно только через Mac App Store.
- Похожая, но менее очевидная ситуация: приложение переехало в Mac App Store, но старые версии по-прежнему доступны для прямой загрузки. Мы отклоняем такие cask во всех официальных репозиториях, чтобы пользователи не застряли на старой версии, ошибочно полагая, что используют самую новую (что, помимо прочего, может представлять угрозу безопасности).
- Приложение не сопровождается: например, требует исправлений, содержит известные неисправленные уязвимости безопасности или официально снято с поддержки.
- На главной странице приложения нет информации (например, в репозитории GitHub отсутствует README).
- У cask нет публичного присутствия, поэтому
brew installбудет единственным способом установить ПО, и пользователи не смогут легко проверить его подлинность.- Или если URL-адрес загрузки cask находится за формой входа или регистрации, а хост отличается от хоста главной страницы.
- Сопровождать cask неоправданно сложно. Например, так было с Audacity и старыми cask для разработки на Java.
- Ранее cask отклоняли из-за проблемы, которую мы не можем исправить, а новая заявка эту проблему не решает. Например, первая заявка на добавление
soapui: проблемы с установкой не были устранены в двух последующих заявках. - Cask дублирует другой. Такие заявки чаще всего возникают, когда не соблюдаются правила создания токенов.
- Приложение имеет открытый исходный код и доступно только через командную строку (то есть использует только артефакт
binary). В таком случае, чтобы избежать дублирования, сначала отправьте его в homebrew/core в качестве формулы, собирающей приложение из исходного кода. Если заявку отклонят, можно повторно подать её как cask (добавьте ссылку на issue в свой pull request, чтобы мы могли ознакомиться с обсуждением и причинами отказа). - Приложение имеет открытый исходный код и графический интерфейс, но для него не предоставляются готовые сборки (или доступны только старые версии). Лучше разместить его в homebrew/core, чтобы пользователи не получали постоянно устаревшие версии. Например, см.
gedit. - У нас есть веские основания полагать, что добавление cask может поставить под угрозу весь проект. Пока такое случалось лишь однажды — с Popcorn Time.
- Cask, которые не работают в последней версии macOS, будут отклонены. Если Apple будет придерживаться текущего плана перехода на Rosetta 2, это коснётся программного обеспечения только для x86_64, когда macOS 28 станет последней версией macOS.
Контент для взрослых
Homebrew — это инструмент, которым пользуется преимущественно взрослая аудитория. Наши пользователи живут по всему миру и по-разному относятся к сексу, насилию и другим темам. Поэтому мы не считаем своей задачей навязывать пользователям взгляды какой-либо культуры на контент для взрослых. При этом мы хотим, чтобы сопровождающим не приходилось взаимодействовать с таким контентом, если они сами этого не выбрали.
Мы принимаем cask с контентом для взрослых, но требуем, чтобы homepage и корень домена url были безопасны для работы, то есть, например, не отображали изображения насилия или контента для взрослых. На этих страницах допустимы текстовые описания контента для взрослых.
Homebrew оставляет за собой право добавлять или удалять cask в зависимости от их влияния на экосистему Homebrew в целом. Например, если хост критически важной инфраструктуры потребует удалить cask для поддержания работы нашей инфраструктуры, мы можем неохотно удалить его ради непрерывной работы сервисов для пользователей.
Приём ни одного cask не гарантирован
Следуйте приведённым выше рекомендациям — и у вашей заявки будут хорошие шансы на одобрение. Но помните: документация часто отстаёт от текущей практики принятия решений, и мы не можем предвидеть все ситуации. Если опыт подсказывает сопровождающим, что это пойдёт на пользу Homebrew в целом, они могут отступить от этих правил.
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/Acceptable-Casks