Не существует набора практик, который мог бы гарантировать, что программное обеспечение никогда не будет иметь дефектов или уязвимостей. Даже формальные методы могут не сработать, если спецификации или допущения неверны. Также не существует набора практик, который мог бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков.
Однако следование лучшим практикам может помочь улучшить результаты проектов. Например, некоторые практики обеспечивают проверку несколькими людьми перед выпуском, что может помочь найти трудно обнаруживаемые технические уязвимости и помочь построить доверие и желание повторного взаимодействия между разработчиками из разных организаций.
Эта страница обсуждает набор лучших практик для проектов свободного и открытого ПО (Free/Libre and Open Source Software - FLOSS), разработанных для значка "Передовая практика Open Source Security Foundation (OpenSSF)". Проекты, которые следуют этим лучшим практикам, смогут добровольно самостоятельно сертифицироваться и показать, что они получили соответствующий значок. Проекты могут сделать это бесплатно, используя веб-приложение (BadgeApp), чтобы объяснить, как они соответствуют этим практикам и их подробным критериям.
Эти лучшие практики были созданы для:
Идиома "лучшие практики" означает "процедура или набор процедур, которые предпочтительны или считаются стандартными в организации, отрасли и т.д." (источник: Dictionary.com). Эти критерии - это то, что мы считаем широко "предпочтительным или считающимся стандартным" в более широком сообществе FLOSS.
Для получения дополнительной информации о том, как были разработаны эти критерии, см. сайт значка "Передовая практика OpenSSF" на GitHub.
Вы также можете посмотреть полные критерии.
Критерии лучших практик разделены на три уровня:
Каждый критерий имеет короткое имя, показанное в виде надстрочного текста внутри квадратных скобок после текста критерия.
Linux Foundation также спонсирует проект OpenChain, который определяет критерии для "высококачественной программы соответствия Free and Open Source Software (FOSS)". OpenChain фокусируется на том, как организации могут лучше всего использовать FLOSS и вносить вклад обратно в проекты FLOSS, в то время как значок OpenSSF Best Practices фокусируется на самих проектах FLOSS. Значок OpenSSF Best Practices и OpenChain работают вместе, чтобы помочь улучшить FLOSS и способы использования FLOSS.
В некоторых случаях мы автоматически тестируем и заполняем информацию, если проект следует стандартным соглашениям и размещен на сайте (например, GitHub) с хорошей поддержкой API.
Мы намерены улучшить эту автоматизацию в будущем. Улучшения автоматизации приветствуются!
Однако мы намеренно отдали приоритет тому, "что важно", даже если это не может быть экономически автоматизировано. Мы любим автоматизированные измерения, но не всё важное можно автоматизировать или автоматизировать экономически.
Мы ожидаем, что эти практики и их подробные критерии будут обновляться со временем. Мы планируем добавлять новые критерии, но отмечать их как "будущие" критерии, чтобы проекты могли добавить эту информацию и сохранить свой значок.
Отзывы очень приветствуются через сайт GitHub в виде задач или запросов на слияние. Также есть список рассылки для общего обсуждения.
Ключевые слова "MUST" (ДОЛЖЕН), "MUST NOT" (НЕ ДОЛЖЕН), "SHOULD" (СЛЕДУЕТ), "SHOULD NOT" (НЕ СЛЕДУЕТ) и "MAY" (МОЖЕТ) в этом документе следует интерпретировать так, как описано в RFC 2119. Добавлен дополнительный термин SUGGESTED (РЕКОМЕНДУЕТСЯ). В общем, эти ключевые слова имеют следующие значения:
Часто критерий формулируется как то, что SHOULD быть сделано, или SUGGESTED, потому что его может быть трудно реализовать или затраты на это могут быть высокими.
Для получения значка все критерии ОБЯЗАН/НЕОБХОДИМО/НЕДОПУСТИМО должны быть выполнены, все критерии СЛЕДУЕТ/НЕ СЛЕДУЕТ должны быть выполнены ИЛИ не выполнены с обоснованием, а также должны быть учтены все критерии МОЖЕТ/ЖЕЛАТЕЛЬНО (они должны быть оценены как выполненные или невыполненные; для этих критериев обоснование не требуется, если не указано иное). Ответ «Неприменимо», если он разрешен, считается выполненным критерием. В некоторых случаях, особенно на более высоких уровнях, может потребоваться обоснование и/или URL-адрес.
Некоторые критерии имеют особую разметку, влияющую на это:
Проект должен достичь предыдущего уровня, чтобы достичь следующего уровня. В некоторых случаях критерии SHOULD становятся MUST в значках более высокого уровня, а некоторые критерии SUGGESTED на более низких уровнях становятся SHOULD или MUST в значках более высокого уровня. Более высокие уровни также требуют больше обоснований, потому что мы хотим, чтобы другие понимали, как выполняются критерии.
(Многие) криптографические критерии не всегда применимы, потому что некоторому программному обеспечению не нужно напрямую использовать криптографические возможности. В таких случаях отвечайте N/A.
Существует один подразумеваемый критерий прохождения - каждый проект ДОЛЖЕН иметь публичный веб-сайт со стабильным URL. Это требуется для создания записи значка в первую очередь.
Если вы не знакомы с разработкой программного обеспечения или управлением проектом FLOSS, материалы, такие как Producing Open Source Software Карла Фогеля, могут быть вам полезны.
Вот несколько ключевых терминов:
Критерии:
Проходной уровень не включает критерии, которые были бы непрактичны для проекта, выполняемого одним человеком, например, чего-то, требующего значительной суммы денег. Многие проекты FLOSS небольшие, и мы не хотим исключать их подобным образом.
Наше приложение присваивает каждому проекту уникальный идентификатор, но это не помогает людям при поиске проекта. Для наших целей настоящим именем проекта является URL его репозитория, а если он недоступен, то URL «главной страницы» проекта. Мы ограничиваем частоту изменений URL репозитория, чтобы предотвратить злоупотребления. Обычно проекты имеют имя, понятное человеку, но эти имена недостаточно уникальны.
В статье Open badges for education: what are the implications at the intersection of open systems and badging? определены три общие причины для создания систем значков (все применимы к данному проекту):
Мы решили использовать самосертификацию, потому что это позволяет участвовать большому количеству проектов (даже небольших). Существуют миллионы проектов FLOSS, и оплата третьим лицам за независимую оценку каждого из них не масштабируется. Существует риск того, что проекты могут делать ложные заявления, но мы считаем, что этот риск невелик, пользователи могут проверить заявления самостоятельно, а ложные заявления могут быть отклонены. Мы также используем автоматизацию для отклонения ложных заявлений, когда мы можем быть уверены в результатах.