Dev Log Week 2025-19: Spring Migration

I’m no ornithologist, but I guess that by mid May, most bird species will typically have finished their spring migration. But I am not a bird, so I only now got started.

Puns aside, though: I did actually get caught up in a large (if not massive) migration last week, it happens to happen in spring and funnily enough, it was triggered by a library we use called Spring. So a very fitting title, imo :wink:

For some context, I need to go back to the beginning of the devlog. And please be warned…this issue is going to be a bit technical. This series of development logs started for week 4 of 2024. Back then, the title was “housekeeping” and it referred to a long-overdue upgrade of various open-source libraries we use to the build the game. While it was a pretty thorough upgrade, I left one major change for later, partly because at least one library wasn’t compatible at the time, but mostly because the required migration would have been too complex for my liking. Now, more than a year later, I am forced to bite the bullet and get it done for technical reasons.

The technically inclined might know that AirlineSim is written in a language called Java. Java used to be a product of a company called Sun, which was at some point bought up by another company called Oracle. This caused all sorts of legal shenanigans that I won’t even pretend to understand, but one outcome of all of this was the silliest of changes: The namespace prefix of javax used by a bunch of libraries was changed to jakarta. Because this namespace is so crucial to the whole Java ecosystem, you are forced to take an all-or-nothing approach: If one library hasn’t migrated to jakarta yet, you can’t migrate at all. And if you want to migrate to jakarta, you have to do it for all libraries at once. Most libraries chose to do a major release purely for this namespace change, such that their functionality remained the same and you “just” had to update your imports. But one library that AirlineSim relies on particularly heavily chose to bundle up the namespace change with a bunch of removals of deprecated features. While this is a perfectly normal move for a “regular” major release, in this case it meant that I was forced to deal with the removal of said features along-side all of the other migrations that were required already anyway.

Given the extent to which we use said library, this is a huge undertaking. I spent the majority of last week on it and I expect to require at least this coming week as well. This feels utterly pointless, but it’s an unavoidable part of software development, especially with a project as old and as complex as AirlineSim. So fingers crossed I don’t break too many things and we can get it over with as soon as possible.

Just as a reminder: This is a prerequisite for an API for AirlineSim, which in turn is a requirement for a new UI layer for the game, which in itself is a dependency of the launch of the “next” game world.

4 Likes

Go ahead and switch to Kotlin while you’re at it :grinning_face_with_smiling_eyes:

The language used is the least of my issues and just fine :smiley: