Software is aging - and what it means for FAF

18

Sometimes people ask us: Can't you just stop changing things and leave FAF as it is? The answer is no, if we do that FAF will eventually die. And today I'd like to explain why.

Preface

Do you still use Windows XP? According to some FAF users the best operating system ever. Or Winamp? Or Netscape Navigator? Or a device with Android 2.3?

Probably not. And with good reason: Software gets old and breaks. Maybe the installation fails, maybe it throws weird errors, maybe it's unusable now because it was build for tiny screen resolutions, maybe it depends on an internet service that no longer exists. There are all sorts of reasons that software breaks.

But what is the cause? And what does that mean for FAF?

Simplification and division of labor: About programming languages and libraries

People are lazy and want to make their lives easier. When the first computers were produced, they could only be programmed in machine language (assembler). In the 80s and 90s some very successful games like Transport Tycoon were written in assembler. This is still possible, but hardly anyone does it anymore. Effort and complexity are high and it works only on the processor whose dialect you program.

Nowadays we write and develop software in a high level language like C++, Java or Python. Some smart people then came up with the idea that it might not make much sense to program the same thing over and over again in every application: Opening files, loading data from the internet or playing music on the speakers. The idea of the library was born. In software development, a library is a collection of functions in code that any other developer can use without knowing the content in detail.

These libraries have yet another name, which sheds more light on the crux of the matter: dependencies. As soon as I as a developer use a library, my program is dependent on this library. Because without the library I cannot build and start my application. In times of the internet this is not a problem, because nothing gets lost. But the problem is a different one, we will get to that now.

The software life cycle

Even if it sounds banal, every piece of software (including the libraries mentioned) goes through a life cycle.
At the very beginning, the software is still very unstable and has few features. Often one speaks also of alpha and beta versions. This is not relevant for us, because we do not use them in FAF.

After that a software matures. More features. More people start using them. What happens? More bugs are found! Sometimes they are small, e.g. a wrong calculation, but sometimes they are big or security related problems. Those that crash your computer or allow malicious attackers to gain full access to the computer they are running on. Both on the FAF Server and on your computer at home a nightmare. So such bugs have to be fixed. And now?

Scenario A:
A new release is built. But: A new release of a dependency alone does not solve any problems. It must also be used in the applications that build on it! This means that all "upstream" projects based on it must also build a new release. And now imagine you use library X, which uses library Y, which in turn uses library Z. This may take some time. And 3 layers of libraries are still few. Many complex projects have dependencies up to 10 levels deep or more.

Scenario B:
There is no new release.

  • The company has discontinued the product, has another new product or is bankrupt.
  • The only developer has been hit by a bus or is fed up with his community and now only plays Fortnite.

Finally, all commercial software will end up in scenario B at the end of its life cycle. And in most cases open source software also builds on top commercial software directly or indirectly.

Just a few examples:

  • All Windows versions before Windows 10 are no longer developed. They have known security issues and you are advised to no longer use them.
  • The latest Direct X versions are only available on the latest Windows
  • Almost all Firefox versions older than 1 release are no longer supported (with a few exceptions)

What happens at the end of the lifecycle?
For a short period of time, probably nothing. But at some point shit hits the fan. Real world examples:

  • When people upgrade their operating system to Windows XP or newer some older Install Shield Wizards doesn't work anymore. Suddenly your precious Anno 1602 fails to install.
  • Your software assume the users Windows installation has a DVD codec or some ancient weird video codec to be installed, but Microsoft stopped shipping it in Windows 10 to save a few bucks.
  • There is an incompatibility in a version of Microsofts Visual C++ redistributable (if you ever wondered what that is, it's a C++ library for Windows available in a few hundred partially incompatible versions)

The impact on FAF

FAF has hundreds of dependencies. Some are managed by other organisations (e.g. the Spring framework for Java handles literally thousands of dependencies), but most are managed by ourselves.

A few examples that have cost us a lot of effort:

  • Operating system upgrades on the server
  • Python 2 is no longer supported, Python 3 is only supported until version 3.4 (affects Python client, lobby server, replay server)
  • Qt 4 was no longer supported (affected Python client), we needed to migrate to Qt5
  • All Java versions prior to 11 are no longer supported by Oracle (concerns API and Java client)
  • Windows updates affects all clients
  • Microsofts weird integration of OneDrive into Windows causes weird errors to pop up

Many of these changes required larger changes in the software codebases and also impacted the behavior of code. As source of new bugs to arise.

If we would freeze time and nothing would change, then all this would be no problem. But the software environment changes, whether we as developers want it to or not. You as a user install a new Windows, you download updates, you buy new computers, there is no way (and no reason) for us to prevent this.

And we must and want FAF to run on modern computers. And of course we want to make bug fixes from our dependencies available to you. So we need to adapt. FAF is alive. And life is change. But unfortunately in software change also brings new errors.

Everytime we upgrade a dependency we might introduce new bugs. And since we're not a million dollar company, we have no QA team to find this bugs before shipping.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
ā€“ Benno Rice

Certainly I, for one, appreciate all the effort that's gone into faf so far (and I am excited for TMM!)

@FunkOff said in Software is aging - and what it means for FAF:

Certainly I, for one, appreciate all the effort that's gone into faf so far (and I am excited for TMM!)

i'll second that, i certainly appreciate all the work that goes on behind closed doors in the back room, it's part of the reason why I play faf, is because it's being kept up to date with both balance and on the technical side, so lets give it up for the faf dev team šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘ šŸ‘

Vault Admin / Creative Team / Map Guru

Thank you for your work and your explanation of the technical wizardry required to keep the client running. I will link this the next time I hear someone complain that the devs should just leave the game as it is and stop breaking things.

@archsimkat said in Software is aging - and what it means for FAF:

Thank you for your work and your explanation of the technical wizardry required to keep the client running.

Bless you & all developers on FAF.

Out of curiosity, what technical skills/expertise would be of great value for the FAF developer team. To rephrase: what are you missing most?

I have seen this video?
How to get engaged

There is a nice official YT video called FAF contributor tutorial that goes in depth on that topic.

You know, it might of been just me but i would about bet you just said its best not to change FAF for how you supported to answer it.

But i do understand what you are saying, but still say the worth of being said is best for another answer.

I stopped using XP because it stopped being supported, not because of broke software.

There is a difference between say moving on and just not having something to do with something at all at a time.

To me a good question is, rather being a million dollar company would it be best placed to spend for FAF or just another supcom?? Easier aside or not.

Good detail on the problem. I know it well running 3 different machines that play FA. My old Pentium 3.6 DTA laptop still runs, has XP on it and an old version of FAF, I don't play it online anymore to avoid borking the install for the reasons you list above (until the install or machine fails). Its a backup anyway for when my newer ones have issues.

The newer machines run current FAF installs, but I get crashes frequently when playing solo using some of the older mods I liked. Again, likely because of the very issues you outlines above (that said, space wars - satellite orbitals & spaceships - was cool).

Main thing is having the base game to play, and kudos to you guys for trying to keep this going. Best RTS ever.

@Brutus5000 said in Software is aging - and what it means for FAF:

And we must and want FAF to run on modern computers. And of course we want to make bug fixes from our dependencies available to you. So we need to adapt. FAF is alive. And life is change. But unfortunately in software change also brings new errors.

understandable for everybody. and good to c that the team is on top of that

Everytime we upgrade a dependency we might introduce new bugs. And since we're not a million dollar company, we have no QA team to find this bugs before shipping.

its not easy to keep calm if u want just want to play a few games and und can't. but i guess u guys know thats the frustration is speaking in that situation. but there is no doubt u guys do a great job and i love to c that u guys handle this little diamond of gamehistory carefull and keep it up to date. all i can say is thx.

just my 2 cent

I was under the impression that the people complaining about change are mostly talking about gameplay balance?

Not only. There is a lot of stuff broken in FAF (e.g. rating changes get lost, are invalid, games weren't counted, map play counter not working, ...). Some stuff is hidden there for ages and some stuff gets introduced by us.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
ā€“ Benno Rice

This might not be a suitable question to some terms, but is say FAF more hard-line encoded for the programming or more virtual??

Thanks

Is the programming/coding more for running with software systems or hardware systems, say for it to work?

A simulator or emulator more of??

More Layer on a Layer or a Layer on Base??

If any of that makes any sense.

Thanks