Hi Mathias,
While we do our best to upgrade dependencies in prior releases, Angular upgrades are often quite complex. So, we've had to take the policy of (often) keeping each DSpace major version *pinned* to a major version of Angular. This means that if you want to upgrade Angular, it's best to upgrade your entire DSpace release.
The reason for this decision is that Angular upgrades usually are not straightforward, and often require touching very large numbers of files. For example:
Each of these PR is very large (2K-8K range), touching a very large number of files. Additionally, some Angular upgrades require other upgrades (like Angular 18 requiring also upgrading to Bootstrap 5), which makes the effort even larger.
Because of the size of these Angular upgrades, when institutions perform these, they often will need to perform manual updates to their themes and similar. This makes the process much more similar to a *major upgrade* of DSpace, instead of a minor upgrade. This is why we recommend the approach of upgrading your entire DSpace rather than attempting to "patch" a DSpace 7 or 8 site up to Angular 18 / Bootstrap 5. In many cases it'd be *easier* for sites to upgrade to DSpace 9 than to backport these patches to an older version of DSpace.
Additionally, as you noticed, because our DSpace major release schedule doesn't always match up well with Angular's major versions, there are sometimes gaps where an Angular release might go out of free support before our next DSpace major release. But, in that scenario, it's worth noting it is possible to purchase Angular commercial support for sites that need it. See
https://endoflife.date/angular and
https://www.herodevs.com/support/nes-angular.
All of the above is not to imply we'd *never* backport an Angular major version upgrade. If the Angular major version is mostly "backwards compatible" and provides a more seamless upgrade process, then we'd gladly include it in a minor DSpace release. It's just been our experience that this is not often the case.
Everything above is much more specific to the frontend. With regards to the backend, we do our best to upgrade Spring (and similar backend technologies) in minor releases
where possible to do so. In some cases, the upgrade is minor and can be done easily. But, in other cases, it's not possible because the extent of the upgrade is too complex. For instance, DSpace 7 still uses Spring 5 and
cannot be easily upgraded to Spring 6. The reason is that Spring 6 *requires* using Jakarta EE, which was a massive change requiring upgrades also to Hibernate, Flyway, etc. See
https://github.com/DSpace/DSpace/pull/9321 This again was such a large change that backporting it to DSpace 7 would prove highly complex. Instead, sites should upgrade to DSpace 8 or 9, which both use the latest versions of Spring 6 and Spring Boot 3.
Overall, our approach is to do our best to backport security fixes for transitive dependencies within reason. If they are easy to backport, we'll do them immediately. But, in the situation of Angular (and sometimes Spring), some are highly complex to backport, as they require updating other major dependencies as well. So, in those scenarios, we unfortunately have to "pin" that DSpace major release to specific major releases of Angular (and sometimes Spring), and tell users to upgrade their DSpace if they want these dependencies updated.
I hope this helps clarify the situation, but further questions are welcome.
Tim