Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/explanation/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,5 @@ storedstate-guidance
:hidden:

state-transition-testing
versions
```
65 changes: 65 additions & 0 deletions docs/explanation/versions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
(tool-versions)=
# Tool versions

In deciding which version of tools to use within the charming ecosystem, the base is the key constraint. Once the base is selected, use the latest supported version of each tool whenever possible.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: I'd probably make this more active. Something like:

Suggested change
In deciding which version of tools to use within the charming ecosystem, the base is the key constraint. Once the base is selected, use the latest supported version of each tool whenever possible.
When you're deciding which version of tools to use within the charming ecosystem, the base is the key constraint. Once you have selected the base, use the latest supported version of each tool whenever possible.


Charms should only support deployment on the LTS versions of Juju that are not yet end-of-life.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should go somewhere else (best practices?) or probably fine to remove it, as LTS and end-of-life already imply this meaning

Suggested change
Charms should only support deployment on the LTS versions of Juju that are not yet end-of-life.


## Find tool versions by base
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The titles don't need to be how-to style. E.g., "Tool versions by bases" or even "Bases" if that doesn't feel too terse to you


Choosing the base or bases that your charm will support in turn selects the versions of Juju, Ops, and Charmcraft that you should use, and the default version of Python available.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to introduce the table, I'd say

Suggested change
Choosing the base or bases that your charm will support in turn selects the versions of Juju, Ops, and Charmcraft that you should use, and the default version of Python available.


| Base | Python | Juju | Ops | Charmcraft |
|------|----------------|---------------|--------------|-------------------|
| 18.04 (Bionic Beaver) | [3.6](https://documentation.ubuntu.com/ubuntu-for-developers/reference/availability/python/) | [2.9](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_2.9.x/) | 1.x | [2.x](https://documentation.ubuntu.com/charmcraft/latest/explanation/bases/) |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We figured it's more logical to link version numbers to release notes, then provide source/reference links outside the table

| 20.04 (Focal Fossa) | [3.8](https://documentation.ubuntu.com/ubuntu-for-developers/reference/availability/python/) | [2.9](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_2.9.x/), [3.6](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_3.6.x/), [4.0](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_4.0.x/juju_4.0.0/) | [2.x](https://github.com/canonical/operator/blob/2.23-maintenance/SECURITY.md) | [2.x](https://documentation.ubuntu.com/charmcraft/latest/explanation/bases/) |
| 22.04 (Jammy Jellyfish) | [3.10](https://documentation.ubuntu.com/ubuntu-for-developers/reference/availability/python/) | [2.9](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_2.9.x/), [3.6](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_3.6.x/), [4.0](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_4.0.x/juju_4.0.0/) | [2.x](https://github.com/canonical/operator/blob/2.23-maintenance/SECURITY.md), [3.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | [3.x](https://documentation.ubuntu.com/charmcraft/3.5.3/reference/platforms/#base), [4.x](https://documentation.ubuntu.com/charmcraft/stable/reference/platforms/#base) |
| 24.04 (Noble Numbat) | [3.12](https://documentation.ubuntu.com/ubuntu-for-developers/reference/availability/python/) | [2.9](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_2.9.x/), [3.6](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_3.6.x/), [4.0](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_4.0.x/juju_4.0.0/) | [2.x](https://github.com/canonical/operator/blob/2.23-maintenance/SECURITY.md), [3.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | [3.x](https://documentation.ubuntu.com/charmcraft/3.5.3/reference/platforms/#base), [4.x](https://documentation.ubuntu.com/charmcraft/stable/reference/platforms/#base) |

## Find your Pebble version from the Juju version

Each version of Juju uses a specific version of Pebble. To determine which Pebble features are available to you, look up the Pebble version from the Juju version.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about strengthening the first sentence. Something like:

Suggested change
Each version of Juju uses a specific version of Pebble. To determine which Pebble features are available to you, look up the Pebble version from the Juju version.
Each version of Juju provides a fixed version of Pebble. To determine which Pebble features are available to you, look up the Pebble version from the Juju version.


| Juju Version | Pebble Version |
|--------------|----------------|
| 2.9 | [1.1.1](https://github.com/canonical/pebble/releases/tag/v1.1.1) |
| 3.1 | [1.4.2](https://github.com/canonical/pebble/releases/tag/v1.4.2) |
| 3.2 | [1.4.0](https://github.com/canonical/pebble/releases/tag/v1.4.0) |
| 3.3 | [1.4.2](https://github.com/canonical/pebble/releases/tag/v1.4.2) |
| 3.4 | [1.7.4](https://github.com/canonical/pebble/releases/tag/v1.7.4) |
| 3.5 | [1.10.2](https://github.com/canonical/pebble/releases/tag/v1.10.2) |
| 3.6 | [1.19.2](https://github.com/canonical/pebble/releases/tag/v1.19.2) |
| 4.0 | [1.26.0](https://github.com/canonical/pebble/releases/tag/v1.26.0) |

## Find the support dates for Juju and Ops

Juju releases new minor versions approximately every 3 months, which are supported with bug fixes for four months from their release date and security fixes for another two months. Long Term Support (LTS) releases receive security fixes for 15 years.

Ops releases new minor versions approximately once per month. Major versions are supported with security fixes for one year from the latest release. To receive bug and security fixes within a major version, charms must update to the latest minor release within that major version.

### Juju

| Version | Status | Release Date | End of Bug Fixes | End of Life |
|---------|--------|--------------|-------------------|-------------|
| [Juju 2.9 (LTS)](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_2.9.x/) | 🟢 Active | 2021-04-28 | | 2035-04-28 |
| [Juju 3.0](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2022-10-22 | 2023-02-22 | 2023-04-23 |
| [Juju 3.1](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2023-02-06 | 2023-06-06 | 2023-08-06 |
| [Juju 3.2](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2023-05-26 | 2023-09-26 | 2023-11-06 |
| [Juju 3.3](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2023-11-10 | 2024-03-10 | 2024-05-10 |
| [Juju 3.4](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2024-02-15 | 2024-06-15 | 2024-08-15 |
| [Juju 3.5](https://documentation.ubuntu.com/juju/latest/releasenotes/unsupported/juju_3.x.x/) | 🔴 EOL | 2024-05-07 | 2024-09-07 | 2024-11-07 |
| [Juju 3.6 (LTS)](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_3.6.x/) | 🟢 Active | 2024-12-11 | | 2039-04-11 |
| [Juju 4.0](https://documentation.ubuntu.com/juju/latest/releasenotes/juju_4.0.x/juju_4.0.0/) | 🟢 Active | 2025-11-14 | 2026-03-14 | 2026-05-14 |

### Ops

| Version | Status | Release Date | End of Life |
|---------|--------|--------------|-------------|
| [Ops 1.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | 🔴 EOL | 2020-10-31 | 2024-04-26 |
| [Ops 2.x](https://github.com/canonical/operator/blob/2.23-maintenance/SECURITY.md) | 🟡 Active | 2023-01-25 | 2026-07-30 |
| [Ops 3.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | 🟢 Active | 2025-07-02 | 2027-01-01 |
Copy link

Copilot AI Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The End of Life date for Ops 3.x appears inconsistent with the stated support policy. The documentation states that major versions are "supported with security fixes for one year from the latest release", but the dates show a release on 2025-07-02 with EOL on 2027-01-01, which is approximately 1.5 years. Please clarify whether this is correct or if the EOL date should be 2026-07-02.

Suggested change
| [Ops 3.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | 🟢 Active | 2025-07-02 | 2027-01-01 |
| [Ops 3.x](https://github.com/canonical/operator/blob/main/SECURITY.md) | 🟢 Active | 2025-07-02 | 2026-07-02 |

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bit that Copilot can't see here is when the last release was. Maybe I should add that to the table, since you do have to have it in order to do the calculation.

However, maybe we shouldn't show an EOL for 3.x? If we never do another 3.x release then in theory it is the date that's in the table. But it will be annoying to update that with each release (the release script could handle it I suppose), and realistically it's going to keep moving, which is a bit weird for a EOL.

As per the discussion in Gothenburg, I think we need to reconsider Ops versioning this cycle. I think we tentatively agreed that we would pick an LTS version of 3.x towards the end of the cycle, and when we do that we'll have a clearer story here.

If you can only use Ops 2.x with 20.04, maybe our "just move to 3.x" isn't good enough and we have to actually make 2.23 an LTS that lasts until April 2035?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our latest thinking is to list the latest Ops release for each major version, eg 3.5, along with the corresponding release and EOL dates


**Legend:**
- 🟢 Active: Currently supported
- 🟡 Active: Supported but approaching EOL
- 🔴 EOL: End of life, no longer supported
Comment on lines +64 to +65
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest changing 🔴 to ❌ for better colour-blind accessibility. We also thought that Active is worth keeping, but change the name and symbol. The name could be something like "Upgrade soon". Maybe 🔔 for the icon? Not sure!

Loading