project/release_process.html · project/release_process.rst 공식 원문 ↗

Zephyr 3.7.0 · Project

Release Process

Development부터 RC·stable release·LTS·auditable code base까지 품질 gate와 책임자를 연결합니다.

Official pathproject/release_process.html
Source fileproject/release_process.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

7개 milestone, blocker criterion, LTS API freeze, 4개 hardware tier, signed annotated tag 명령을 원문 구조로 보존합니다.

Cycle

약 4개월 · RC1~RC6

LTS

2년 주기 · 2.5년 지원

Tag

VERSION · signed tag

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 0B6EC96BFCBB2F75F8BBA92F77E4167B2311CD8035EF0F7DE09C1321A72AA4FC
.. _release_process:

Release Process
###############

The Zephyr project releases on a time-based cycle, rather than a feature-driven
one. Zephyr releases represent an aggregation of the work of many contributors,
companies, and individuals from the community.

A time-based release process enables the Zephyr project to provide users with a
balance of the latest technologies and features and excellent overall quality. A
roughly 4-month release cycle allows the project to coordinate development of
the features that have actually been implemented, allowing the project to
maintain the quality of the overall release without delays because of one or two
features that are not ready yet.

The Zephyr release model was loosely based on the Linux kernel model:

- Release tagging procedure:

  - linear mode on main branch,
  - release branches for maintenance after release tagging.
- Each release period will consist of a development phase followed by a
  stabilization phase. Release candidates will be tagged during the
  stabilization phase. During the stabilization phase, only stabilization
  changes such as bug fixes and documentation will be merged unless granted a
  special exemption by the Technical Steering Committee.

  - Development phase: all changes are considered and merged, subject to
    approval from the respective maintainers.
  - Stabilisation phase: the release manager creates a vN-rc1 tag and the tree
    enters the stabilization phase
  - CI sees the tag, builds and runs tests; Test teams analyse the report from the
    build and test run and give an ACK/NAK to the build
  - The release owner, with test teams and any other needed input, determines if the
    release candidate is a go for release
  - If it is a go for a release, the release owner lays a tag release vN at the
    same point

.. figure:: ../../../project/release_cycle.svg
    :align: center
    :alt: Release Cycle
    :figclass: align-center
    :width: 80%

    Release Cycle

.. note::

    The milestones for the current major version can be found on the
    `Official GitHub Wiki <https://github.com/zephyrproject-rtos/zephyr/wiki/Release-Management>`_.
    Information on previous releases can be found :ref:`here <zephyr_release_notes>`.

Development Phase
*****************

A relatively straightforward discipline is followed with regard to the merging
of patches for each release.  At the beginning of each development cycle, the
main branch is said to be open for development.  At that time, code which is deemed to be
sufficiently stable (and which is accepted by the maintainers and the wide community) is
merged into the mainline tree.  The bulk of changes for a new development cycle
(and all of the major changes) will be merged during this time.

The development phase lasts for approximately three months.  At the end of this time,
the release owner will declare that the development phase is over and releases the first
of the release candidates.  For the codebase release which is destined to be
3.1.0, for example, the release which happens at the end of the development phase
will be called 3.1.0-rc1.  The -rc1 release is the signal that the time to merge
new features has passed, and that the time to stabilize the next release of the
code base has begun.

Stabilization Phase
*******************

Over the next weeks and depending on the release milestone, only stabilization,
cosmetic changes, tests, bug and doc fixes are allowed (See :ref:`table
<release_milestones>` below).

On occasion, more significant changes and new features will be allowed, but such
occasions are rare and require a TSC approval and a justification. As a general
rule, if you miss submitting your code during the development phase for a given
feature, the best thing to do is to wait for the next development cycle. (An
occasional exception is made for drivers for previously unsupported hardware; if
they do not touch any other in-tree code, they cannot cause regressions and
should be safe to add at any time).

As fixes make their way into the mainline, the patch rate will slow over time.
The mainline release owner releases new -rc drops once or twice a week; a normal
series will get up to somewhere between -rc4 and -rc6 before the code base is
considered to be sufficiently stable and the release criteria have been achieved
at which point the final 3.1.0 release is made.

At that point, the whole process starts over again.

.. _release_quality_criteria:

Release Criteria
****************

The main motivation is to clearly have the criteria in place that must be met
for a release. This will help define when a release is "done" in terms that most
people can understand and in ways that help new people to understand the process
and participate in creating successful releases:

- The release criteria documents all the requirements of our target audience for
  each Zephyr release
- The target audiences for each release can be different, and may overlap
- The criteria at any given time are not set in stone: there may be requirements
  that have been overlooked, or that are new, and in these cases, the criteria
  should be expanded to ensure all needs are covered.

Below is the high level criteria to be met for each release:

- No blocker bugs / blocking issues
- All relevant tests shall pass on ``Tier 0`` platforms
- All relevant tests shall pass on Tier 0 and 1 platforms (at least 1 per
  architecture/architecture variant/Hardware features)
- All applicable samples/tests shall build on Tiers 0, 1 and 2
- All high and critical static analysis and security issues addressed
- Release Notes are up-to-date.

Blocker Bugs
============

Blocker bug process kicks in during the release process and is in effect after the
feature freeze milestone. An issue labeled as a blocker practically blocks a
release from happening. All blocker bugs shall be resolved before a release is
created.

A fix for a bug that is granted `blocker` status can be merged to 'main' and included in
the release all the way until the final release date.

Bugs of moderate severity and higher that have impact on all users are typically
the candidates to be promoted to blocker bugs

Contributors and member of the release engineering team shall follow these
guidelines for release blocker bugs:

- Only mark bugs as blockers if the software (Zephyr) must not be released with
  the bug present.
- All collaborators can add or remove blocking labels.
- Evaluate bugs as potential blockers based on their severity and prevalence.
- Provide detailed rationale whenever adding or removing a blocking label.
- Ensure all blockers have the milestone tagged.
- Release managers have final say on blocking status; contact them with any questions.


.. _release_milestones:

Release Milestones
*******************


.. list-table:: Release Milestones
   :widths: 15 25 100 25
   :header-rows: 1

   * - Timeline
     - Checkpoint
     - Description
     - Owner
   * - T-5M
     - Planning
     - Finalize dates for release, Assign release owner and agree on project wide goals for this release.
     - TSC
   * - T-7W
     - Review target milestones
     - Finalize target milestones for features in flight.
     - Release Engineering
   * - T-4W
     - Release Announcement
     - Release owner announces feature freeze and timeline for release.
     - Release Manager
   * - T-3W
     - Feature Freeze (RC1)
     - No new features after RC1, ONLY stabilization and cosmetic changes, bug and doc
       fixes are allowed. New tests for existing features are also allowed.
     - Release Engineering
   * - T-2W
     - 2nd Release Candidate
     - No new features after RC2, ONLY stabilization and cosmetic changes, bug and doc fixes are allowed.
     - Release Manager
   * - T-1W
     - Hard Freeze (RC3)
     - Only blocker bug fixes after RC3, documentation and changes to release notes are allowed.
       Release notes need to be complete by this checkpoint. Release Criteria is
       met.
     - Release Manager
   * - T-0W
     - Release
     -
     - Release Manager


Releases
*********

The following syntax should be used for releases and tags in Git:

- Release [Major].[Minor].[Patch Level]
- Release Candidate [Major].[Minor].[Patch Level]-rc[RC Number]
- Tagging:

  - v[Major].[Minor].[Patch Level]-rc[RC Number]
  - v[Major].[Minor].[Patch Level]
  - v[Major].[Minor].99 - A tag applied to main branch to signify that work on
    v[Major].[Minor+1] has started. For example, v1.7.99 will be tagged at the
    start of v1.8 process. The tag corresponds to
    VERSION_MAJOR/VERSION_MINOR/PATCHLEVEL macros as defined for a
    work-in-progress main branch version. Presence of this tag allows generation of
    sensible output for "git describe" on main branch, as typically used for
    automated builds and CI tools.


.. figure:: ../../../project/release_flow.png
    :align: center
    :alt: Releases
    :figclass: align-center
    :width: 80%

    Zephyr Code and Releases

.. _release_process_lts:

Long Term Support (LTS)
=======================

Long-term support releases are designed to be supported and maintained
for an extended period and is the recommended release for
products and the auditable branch used for certification.

An LTS release is defined as:

- **Product focused**
- **Extended Stabilisation period**: Allow for more testing and bug fixing
- **Stable APIs**
- **Quality Driven Process**
- **Long Term**: Maintained for an extended period of time (at least 2.5 years)
  overlapping previous LTS release for at least half a year.


Product Focused
+++++++++++++++

Zephyr LTS is the recommended release for product makers with an extended
support and maintenance which includes general stability and bug fixes,
security fixes.

An LTS includes both mature and new features. API and feature maturity is
documented and tracked. The footprint and scope of mature and stable APIs expands
as we move from one LTS to the next giving users access to bleeding edge features
and new hardware while keeping a stable foundation that evolves over time.

Extended Stabilisation Period
+++++++++++++++++++++++++++++

Zephyr LTS development cycle differs from regular releases and has an extended
stabilization period. Feature freeze of regular releases happens 3-4 weeks
before the scheduled release date. The stabilization period for LTS is extended
by 3 weeks with the feature freeze occurring 6-7 weeks before the anticipated
release date. The time between code freeze and release date is extended in this case.

Stable APIs
+++++++++++

Zephyr LTS provides a stable and long-lived foundation for developing
products. To guarantee stability of the APIs and the implementation of such
APIs it is required that any release software that makes the core of the OS
went through the Zephyr API lifecycle and stabilized over at least 2 releases.
This guarantees that we release many of the highlighted and core features with
mature and well-established implementations with stable APIs that are
supported during the lifetime of the release LTS.

- API Freeze (LTS - 2)

  - All stable APIs need to be frozen 2 releases before an LTS. APIs can be extended
    with additional features, but the core implementation is not modified. This
    is valid for the following subsystems for example:

    - Device Drivers (i2c.h, spi.h)...
    - Kernel (k_*):
    - OS services (logging,debugging, ..)
    - DTS: API and bindings stability
    - Kconfig

  - New APIs for experimental features can be added at any time as long as they
    are standalone and documented as experimental or unstable features/APIs.
- Feature Freeze (LTS - 1)
  - No new features or overhaul/restructuring of code covering major LTS features.

    - Kernel + Base OS
    - Additional advertised LTS features

  - Auxiliary features on top of and/or extending the base OS and advertised LTS features
    can be added at any time and should be marked as experimental if applicable

Quality Driven Process
++++++++++++++++++++++

The Zephyr project follows industry standards and processes with the goal of
providing a quality oriented releases. This is achieved by providing the
following products to track progress, integrity and quality of the software
components provided by the project:

- Compliance with published coding guidelines, style guides and naming
  conventions and documentation of deviations.
- Static analysis reports

  - Regular static analysis on the complete tree using available commercial and
    open-source tools, and documentation of deviations and false positives.

- Documented components and APIS
- Requirements Catalog
- Verification Plans
- Verification Reports
- Coverage Reports
- Requirements Traceability Matrix (RTM)
- SPDX License Reports

Each release is created with the above products to document the quality and the
state of the software when it was released.

Long Term Support and Maintenance
++++++++++++++++++++++++++++++++++

A Zephyr LTS release is published every 2 years and is branched and maintained
independently from the main tree for at least 2.5 years after it was
released. Support and maintenance for an LTS release stops at least half a year
after the following LTS release is published.

.. figure:: ../../../project/lts.svg
    :align: center
    :alt: Long Term Support Release
    :figclass: align-center
    :width: 80%

    Long Term Support Release

Changes and fixes flow in both directions. However, changes from main branch to an
LTS branch will be limited to fixes that apply to both branches and for existing
features only.

All fixes for an LTS branch that apply to the mainline tree shall be submitted to
mainline tree as well.

Auditable Code Base
===================

An auditable code base is to be established from a defined subset of Zephyr OS
features and will be limited in scope. The LTS,  development tree, and the
auditable code bases shall be kept in sync after the audit branch is created,
but with a more rigorous process in place for adding new features into the audit
branch used for certification.

This process will be applied before new features move into the
auditable code base.

The initial and subsequent certification targets will be decided by the Zephyr project
governing board.

Processes to achieve selected certification will be determined by the Security and
Safety Working Groups and coordinated with the TSC.


Hardware Support Tiers
***********************

Tier 0: Emulation Platforms
===========================

- Tests are both built and run in these platforms in CI, and therefore runtime
  failures can block Pull Requests.
- Supported by the Zephyr project itself, commitment to fix bugs in releases.
- One Tier 0 platform is required for each new architecture.
- Bugs reported against platforms of this tier are to be evaluated and treated as
  a general bug in Zephyr and should be dealt with the highest priority.

Tier 1: Supported Platforms
===========================

- Commitment from a specific team to run tests using twister device
  testing for the "Zephyr compatibility test suite" (details TBD)
  on a regular basis using open-source and publicly available drivers.
- Commitment to fix bugs in time for releases. Not supported by "Zephyr Project"
  itself.
- General availability for purchase
- Bugs reported against platforms of this tier are to be evaluated and treated
  as a general bug in Zephyr and should be dealt with medium to high priority.

Tier 2: Community Platforms
===========================

- Platform implementation is available in upstream, no commitment to testing,
  may not be generally available.
- Has a dedicated maintainer who commits to respond to issues / review patches.
- Bugs reported against platforms of this tier are NOT considered as
  a general bug in Zephyr.

Tier 3: Deprecated and unsupported Platforms
============================================

- Platform implementation is available, but no owner or unresponsive owner.
- No commitment to support is available.
- May be removed from upstream if no one works to bring it up to tier 2 or better.
- Bugs reported against platforms of this tier are NOT considered as
  a general bug in Zephyr.


Release Procedure
******************

This section documents the Release manager responsibilities so that it serves as
a knowledge repository for Release managers.

Release Checklist
=================

Each release has a GitHub issue associated with it that contains the full
checklist. After a release is complete, a checklist for the next release is
created.

Tagging
=======

The final release and each release candidate shall be tagged using the following
steps:

.. note::

    Tagging needs to be done via explicit git commands and not via GitHub's release
    interface.  The GitHub release interface does not generate annotated tags (it
    generates 'lightweight' tags regardless of release or pre-release). You should
    also upload your gpg public key to your GitHub account, since the instructions
    below involve creating signed tags. However, if you do not have a gpg public
    key you can opt to remove the ``-s`` option from the commands below.

.. tabs::

    .. tab:: Release Candidate

        .. note::

            This section uses tagging 1.11.0-rc1 as an example, replace with
            the appropriate release candidate version.

        #. Update the version variables in the :zephyr_file:`VERSION` file
           located in the root of the Git repository to match the version for
           this release candidate. The ``EXTRAVERSION`` variable is used to
           identify the rc[RC Number] value for this candidate::

            EXTRAVERSION = rc1

        #. Post a PR with the updated :zephyr_file:`VERSION` file using
           ``release: Zephyr 1.11.0-rc1`` as the commit subject. Merge
           the PR after successful CI.
        #. Tag and push the version, using an annotated tag::

            $ git pull
            $ git tag -s -m "Zephyr 1.11.0-rc1" v1.11.0-rc1
            $ git push [email protected]:zephyrproject-rtos/zephyr.git v1.11.0-rc1

        #. Send an email to the mailing lists (``announce`` and ``devel``)
           with a link to the release

    .. tab:: Final Release

        .. note::

            This section uses tagging 1.11.0 as an example, replace with the
            appropriate final release version.

        When all final release criteria has been met and the final release notes
        have been approved and merged into the repository, the final release version
        will be set and repository tagged using the following procedure:

        #. Update the version variables in the :zephyr_file:`VERSION` file
           located in the root of the Git repository. Set ``EXTRAVERSION``
           variable to an empty string to indicate final release::

            EXTRAVERSION =

        #. Post a PR with the updated :zephyr_file:`VERSION` file using
           ``release: Zephyr 1.11.0`` as the commit subject. Merge
           the PR after successful CI.
        #. Tag and push the version, using two annotated tags::

            $ git pull
            $ git tag -s -m "Zephyr 1.11.0" v1.11.0
            $ git push [email protected]:zephyrproject-rtos/zephyr.git v1.11.0

        #. Find the new ``v1.11.0`` tag at the top of the releases page and
           edit the release with the ``Edit tag`` button with the following:

            * Copy the overview of ``docs/releases/release-notes-1.11.rst``
              into the release notes textbox and link to the full release notes
              file on docs.zephyrproject.org.

        #. Send an email to the mailing lists (``announce`` and ``devel``) with a link
           to the release

Part 3

한국어 전문 번역

Zephyr project는 feature 완료 여부가 아니라 정해진 시간 주기에 따라 release합니다. 각 Zephyr release는 수많은 contributor, company, community individual의 작업을 모은 결과입니다.

시간 기반 release process는 최신 technology·feature와 높은 전체 품질 사이의 균형을 사용자에게 제공합니다. 약 4개월 주기를 사용하면 실제 구현된 feature를 중심으로 development를 조정할 수 있고, 준비되지 않은 한두 feature 때문에 전체 release를 늦추지 않으면서 품질을 유지할 수 있습니다.

Zephyr release model은 Linux kernel model을 느슨하게 바탕으로 합니다.

  • Release tagging은 main branch에서 선형으로 진행하고, release tag 뒤 유지보수에는 release branch를 사용합니다.
  • 각 release 기간은 development phase 뒤 stabilization phase가 이어집니다. Stabilization 중 release candidate를 tag하며, TSC가 특별 예외를 승인하지 않는 한 bug fix와 documentation 같은 안정화 변경만 merge합니다.
  • Development phase에는 담당 maintainer의 승인을 받은 모든 변경을 검토하고 merge합니다.
  • Release Manager가 vN-rc1 tag를 만들면 tree가 stabilization phase로 들어갑니다.
  • CI가 tag를 감지해 build와 test를 실행하고, test team이 report를 분석해 build에 ACK 또는 NAK를 줍니다.
  • Release owner는 test team과 필요한 의견을 바탕으로 release candidate를 최종 release로 진행할지 결정합니다.
  • 진행하기로 했다면 같은 지점에 최종 vN release tag를 둡니다.
Release Cycle
Development

약 3개월 동안 major change와 feature merge

RC1 · Feature Freeze

Stabilization phase 시작

RC2

Bug·documentation·cosmetic fix

RC3 · Hard Freeze

Blocker fix와 release note만 허용

Stable release

Criteria 충족 뒤 최종 tag

Stable release 뒤 다음 development cycle이 다시 시작됩니다.

Development Phase

각 release에서 patch를 merge할 때 비교적 단순한 규율을 따릅니다. Development cycle 시작 시 main branch가 development에 열립니다. 충분히 안정적이고 maintainer와 넓은 community가 받아들인 code를 mainline tree에 merge합니다. 새 cycle 변경 대부분과 모든 major change가 이 기간에 들어갑니다.

Development phase는 약 3개월입니다. 끝나면 release owner가 development 종료를 선언하고 첫 release candidate를 발행합니다. 예를 들어 최종 version이 3.1.0이라면 development 종료 release는 3.1.0-rc1입니다. -rc1은 새 feature merge 기간이 끝나고 다음 code-base release의 안정화가 시작됐다는 신호입니다.

Stabilization Phase

그 뒤 몇 주 동안 release milestone에 따라 stabilization change, cosmetic change, test, bug fix, documentation fix만 허용됩니다.

더 큰 변경이나 새 feature가 허용되는 경우도 있지만 드물며 TSC 승인과 정당한 이유가 필요합니다. Development phase에 feature code를 제출하지 못했다면 일반적으로 다음 cycle을 기다려야 합니다. 다만 기존 tree의 다른 code를 건드리지 않아 regression을 일으킬 수 없는, 이전에 지원하지 않던 hardware용 driver는 예외적으로 언제든 추가할 수 있습니다.

Fix가 mainline으로 들어오면서 patch 유입 속도는 점차 느려집니다. Mainline release owner는 주 1~2회 새 -rc를 발행합니다. 보통 -rc4에서 -rc6 사이까지 진행한 뒤 code base가 충분히 안정적이고 release criterion을 충족하면 최종 3.1.0 release를 만듭니다. 그 시점부터 전체 process가 다시 시작됩니다.

Release Criteria

Release가 반드시 충족해야 할 criterion을 명확히 두는 것이 목적입니다. 대부분의 사람이 이해할 수 있는 표현으로 release가 언제 완료됐는지 정의하고, 새 참여자도 process를 이해해 성공적인 release에 기여하도록 돕습니다.

  • Release criterion은 각 Zephyr release의 target audience가 요구하는 모든 사항을 문서화합니다.
  • Release마다 target audience가 다를 수 있고 서로 겹칠 수 있습니다.
  • Criterion은 고정 불변이 아닙니다. 빠뜨렸거나 새로 생긴 requirement가 있다면 모든 필요를 다루도록 확장해야 합니다.

모든 release가 충족해야 할 상위 criterion은 다음과 같습니다.

  • Blocker bug 또는 blocking issue가 없어야 합니다.
  • 모든 관련 test가 Tier 0 platform에서 통과해야 합니다.
  • Tier 0·1 platform에서 architecture, architecture variant, hardware feature마다 최소 1개씩 관련 test가 통과해야 합니다.
  • 적용 가능한 모든 sample과 test가 Tier 0·1·2에서 build되어야 합니다.
  • High·critical 등급 static-analysis issue와 security issue를 모두 처리해야 합니다.
  • Release Notes가 최신이어야 합니다.

Blocker Bugs

Blocker-bug process는 release process 중 feature-freeze milestone 뒤부터 적용됩니다. Blocker label이 붙은 issue는 사실상 release를 막으며, release를 만들기 전에 모든 blocker bug를 해결해야 합니다.

blocker status를 받은 bug fix는 최종 release 날짜까지 main에 merge해 release에 포함할 수 있습니다. 보통 moderate 이상 severity이면서 모든 사용자에게 영향을 주는 bug가 blocker 후보입니다.

Contributor와 Release Engineering team member는 다음 지침을 따릅니다.

  • 해당 bug가 있는 상태로 Zephyr를 release해서는 안 될 때만 blocker로 표시합니다.
  • 모든 Collaborator가 blocking label을 추가하거나 제거할 수 있습니다.
  • Severity와 prevalence를 바탕으로 potential blocker를 평가합니다.
  • Blocking label을 추가하거나 제거할 때마다 상세한 근거를 제공합니다.
  • 모든 blocker에 milestone tag가 붙어 있는지 확인합니다.
  • Blocking status의 최종 결정권은 Release Manager에게 있으므로 질문이 있으면 이들에게 문의합니다.

Release Milestones

Release Milestones
시점Checkpoint설명Owner
T-5MPlanningRelease 날짜를 확정하고 release owner를 지정하며 이번 release의 project-wide goal에 합의합니다.TSC
T-7WTarget milestone 검토진행 중인 feature의 target milestone을 확정합니다.Release Engineering
T-4WRelease AnnouncementRelease owner가 feature freeze와 release timeline을 공지합니다.Release Manager
T-3WFeature Freeze (RC1)RC1 이후 새 feature를 받지 않습니다. Stabilization·cosmetic change·bug/doc fix와 기존 feature용 새 test만 허용합니다.Release Engineering
T-2W2nd Release CandidateRC2 이후 새 feature를 받지 않으며 stabilization·cosmetic change·bug/doc fix만 허용합니다.Release Manager
T-1WHard Freeze (RC3)RC3 이후 blocker bug fix, documentation, release-note 변경만 허용합니다. 이 checkpoint까지 release note가 완성되고 Release Criteria를 충족해야 합니다.Release Manager
T-0WRelease최종 release를 발행합니다.Release Manager

Releases

Git release와 tag에는 다음 syntax를 사용합니다.

  • Release: [Major].[Minor].[Patch Level]
  • Release Candidate: [Major].[Minor].[Patch Level]-rc[RC Number]
  • Tag: v[Major].[Minor].[Patch Level]-rc[RC Number] 또는 v[Major].[Minor].[Patch Level]
  • v[Major].[Minor].99: main branch에서 다음 minor version 작업이 시작됐음을 나타냅니다. 예를 들어 v1.8 process 시작 때 v1.7.99를 tag합니다. Work-in-progress main version의 VERSION_MAJOR, VERSION_MINOR, PATCHLEVEL macro와 대응하며 automated build와 CI가 main에서 합리적인 git describe 결과를 만들게 합니다.
Zephyr Code와 Releases
Development Tree

분기별 regular development release

Bug-fix releases

Regular release를 순환 유지보수

Biennial LTS

2년마다 development release에서 LTS 분기

Stable releases

LTS branch를 장기 유지보수

Feature subset

인증 범위에 필요한 기능만 선별

Auditable Code Base

엄격한 변경 절차 적용

Audit-ready documentation

인증에 사용할 품질 증거 생성

Quarterly development와 biennial LTS가 서로 다른 유지보수·감사 경로로 이어집니다.

Long Term Support (LTS)

LTS release는 긴 기간 지원·유지보수하도록 설계되며 product와 certification에 사용하는 auditable branch에 권장됩니다.

  • Product focused
  • Extended Stabilisation period: 더 많은 test와 bug fix 시간을 확보
  • Stable APIs
  • Quality Driven Process
  • Long Term: 최소 2.5년 유지보수하며 이전 LTS와 최소 반년 겹침

Product Focused

Zephyr LTS는 일반 stability·bug fix·security fix를 포함하는 확장 지원과 유지보수가 필요한 product maker에게 권장됩니다.

LTS에는 mature feature와 new feature가 모두 들어갑니다. API와 feature maturity를 문서화하고 추적합니다. 한 LTS에서 다음 LTS로 갈수록 mature·stable API의 범위가 넓어져, 안정된 기반을 계속 발전시키면서 최신 feature와 새 hardware에도 접근할 수 있습니다.

Extended Stabilisation Period

LTS development cycle은 regular release와 달리 stabilization 기간이 더 깁니다. Regular release는 예정일 3~4주 전에 feature freeze하지만 LTS는 3주를 더해 예정일 6~7주 전에 feature freeze합니다. 따라서 code freeze와 release date 사이가 길어집니다.

Stable APIs

Zephyr LTS는 product 개발을 위한 안정적이고 수명이 긴 기반을 제공합니다. API와 implementation의 안정성을 보장하려면 OS core를 이루는 release software가 Zephyr API lifecycle을 거치고 최소 2개 release 동안 안정화되어야 합니다. 그 결과 주요 core feature를 성숙한 implementation과 stable API로 제공하고 LTS lifetime 동안 지원할 수 있습니다.

  • API Freeze (LTS - 2): 모든 stable API는 LTS 두 release 전에 freeze해야 합니다. 추가 feature로 확장할 수 있지만 core implementation은 바꾸지 않습니다. Device Driver(i2c.h, spi.h 등), Kernel(k_*), OS service(logging, debugging 등), DTS API·binding, Kconfig가 해당합니다.
  • Standalone이며 experimental 또는 unstable이라고 문서화한 새 experimental-feature API는 언제든 추가할 수 있습니다.
  • Feature Freeze (LTS - 1): Kernel·Base OS와 추가로 공표한 major LTS feature를 대상으로 새 feature나 대규모 overhaul/restructuring을 허용하지 않습니다.
  • Base OS나 공표된 LTS feature 위에 올라가거나 이를 확장하는 auxiliary feature는 언제든 추가할 수 있고, 해당한다면 experimental로 표시해야 합니다.

Quality Driven Process

Zephyr project는 품질 중심 release를 제공하기 위해 industry standard와 process를 따릅니다. 다음 산출물로 project software component의 진행 상황, integrity, quality를 추적합니다.

  • 공개 coding guideline·style guide·naming convention 준수와 deviation 문서화
  • Commercial·open-source tool로 전체 tree를 정기 분석하고 deviation과 false positive를 문서화한 static-analysis report
  • 문서화된 component와 API
  • Requirements Catalog
  • Verification Plans와 Verification Reports
  • Coverage Reports
  • Requirements Traceability Matrix(RTM)
  • SPDX License Reports

각 release는 위 산출물과 함께 만들어져 release 시점의 software 상태와 품질을 기록합니다.

Long Term Support and Maintenance

Zephyr LTS는 2년마다 발행합니다. Main tree와 별도 branch에서 release 뒤 최소 2.5년 유지보수하며, 다음 LTS가 나온 뒤 최소 반년이 지나야 이전 LTS 지원과 유지보수를 끝냅니다.

Long Term Support Release
main 2.5

Regular development

main 2.6

다음 feature cycle

main 2.7

LTS 기준 release

LTS 2.7.1

Applicable fix backport

LTS 2.7.2

Stable maintenance

main 3.0

다음 mainline development

Main과 LTS 사이 fix는 양방향으로 흐르지만 main→LTS는 기존 feature에 함께 적용되는 fix로 제한합니다.

LTS branch의 fix가 mainline tree에도 적용된다면 mainline에도 반드시 제출해야 합니다.

Auditable Code Base

Auditable code base는 Zephyr OS feature의 정의된 subset으로 만들며 범위를 제한합니다. Audit branch 생성 뒤 LTS, development tree, auditable code base를 동기화하되 certification용 audit branch에 새 feature를 넣을 때는 더 엄격한 process를 적용합니다. 새 feature가 auditable code base로 이동하기 전에 이 process를 거칩니다.

최초와 이후 certification target은 Zephyr project Governing Board가 정합니다. 선택한 certification 달성 process는 Security·Safety Working Group이 정하고 TSC와 조정합니다.

Hardware Support Tiers

Tier 0: Emulation Platforms

  • CI에서 test를 build하고 실행하므로 runtime failure가 pull request를 막을 수 있습니다.
  • Zephyr project가 직접 지원하며 release의 bug를 고칠 책임을 집니다.
  • 새 architecture마다 Tier 0 platform이 하나 필요합니다.
  • 이 tier platform의 bug는 일반 Zephyr bug로 평가하고 최우선으로 처리해야 합니다.

Tier 1: Supported Platforms

  • 특정 team이 open-source·공개 driver를 사용해 Twister device testing으로 Zephyr compatibility test suite를 정기 실행하겠다고 약속해야 합니다.
  • Release에 맞춰 bug를 고칠 책임이 있지만 Zephyr Project 자체가 지원하지는 않습니다.
  • 일반 사용자가 구매할 수 있어야 합니다.
  • 이 tier의 bug는 일반 Zephyr bug로 보고 medium~high priority로 처리합니다.

Tier 2: Community Platforms

  • Platform implementation이 upstream에 있지만 test 약속은 없고 일반 구매가 불가능할 수 있습니다.
  • Issue에 답하고 patch를 review하겠다고 약속한 dedicated maintainer가 있습니다.
  • 이 tier platform의 bug는 일반 Zephyr bug로 간주하지 않습니다.

Tier 3: Deprecated and unsupported Platforms

  • Platform implementation은 있지만 owner가 없거나 응답하지 않습니다.
  • 지원 약속이 없습니다.
  • 누구도 Tier 2 이상으로 끌어올리지 않으면 upstream에서 제거될 수 있습니다.
  • 이 tier platform의 bug는 일반 Zephyr bug로 간주하지 않습니다.

Release Procedure

이 절은 Release Manager의 책임을 문서화해 이후 Release Manager가 활용할 knowledge repository 역할을 합니다.

Release Checklist

각 release에는 전체 checklist를 담은 GitHub issue가 연결됩니다. Release가 끝나면 다음 release용 checklist를 만듭니다.

Tagging

최종 release와 각 release candidate는 다음 절차로 tag해야 합니다.

Release Candidate

아래는 1.11.0-rc1 tag 예시이므로 실제 release-candidate version으로 바꿉니다.

  • Git repository root의 VERSION file에서 version variable을 release candidate와 맞춥니다. EXTRAVERSION으로 rc[RC Number] 값을 지정합니다.
EXTRAVERSION = rc1
  • 수정한 VERSION file을 release: Zephyr 1.11.0-rc1 commit subject로 PR에 올리고 CI 성공 뒤 merge합니다.
  • Annotated tag로 version을 tag하고 push합니다.
$ git pull
$ git tag -s -m "Zephyr 1.11.0-rc1" v1.11.0-rc1
$ git push [email protected]:zephyrproject-rtos/zephyr.git v1.11.0-rc1

Release link를 포함한 email을 announce와 devel mailing list에 보냅니다.

Final Release

아래는 1.11.0 tag 예시이므로 실제 final-release version으로 바꿉니다. 모든 final-release criterion을 충족하고 최종 release note가 승인되어 repository에 merge된 뒤 version을 설정하고 tag합니다.

  • Repository root의 VERSION file을 갱신하고 final release임을 나타내도록 EXTRAVERSION을 빈 문자열로 둡니다.
EXTRAVERSION =
  • 수정한 VERSION file을 release: Zephyr 1.11.0 subject의 PR로 올리고 CI 성공 뒤 merge합니다.
  • Annotated tag를 만들고 version을 push합니다.
$ git pull
$ git tag -s -m "Zephyr 1.11.0" v1.11.0
$ git push [email protected]:zephyrproject-rtos/zephyr.git v1.11.0
  • Releases page 위쪽에서 새 v1.11.0 tag를 찾아 Edit tag로 release를 편집합니다.
  • docs/releases/release-notes-1.11.rst의 overview를 release-note textbox에 복사하고 docs.zephyrproject.org의 전체 release-note file을 link합니다.
  • Release link를 포함한 email을 announce와 devel mailing list에 보냅니다.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.