SunUO a free Ultima Online server
This page contains an incomplete list of RunUO design flaws. This is my personal opinion. It is meant to be constructive criticism. It was the reason for me to begin the SunUO project.
Don't misunderstand me; I think the overall code quality in RunUO is pretty good. I would never fork bad code in my free time.
The SunUO project tries to fix some of these design flaws while staying compatible with RunUO.
Every minor bug in any script crashes the whole server.
When an exception occurs, there is no diagnostic error message.
No synchronization. RunUO uses thread-unsafe classes.
No multithreading support, only one CPU is used on SMP machines.
There is no workaround for the 2/3 GB memory limitation; RunUO is not compatible with 64 bit platforms. This is a big problem on large shards.
RunUO recompiles all scripts on startup, even if they havn't changed.
The RunUO API has changed between every release, making old scripts incompatible. Let's hope this is not the case for 1.0+ releases. Still, there is no definition what belongs to the API and what is an "internal" class. That makes a stable API nearly impossible.
The RunUO core contains several unsafe hacks and pointer arithmetics which are not portable. Their Mono workaround is code which was never tested, it simply does not work.
The server restart function (in the scripts) does not account for .NET wrappers like Mono; without BINFMT_MISC (Linux), server restart does not work.
The administrator has to edit source code to configure RunUO.
Upgrades are a lot of work because these source code changes have to be merged with the changes of a new RunUO release.
The scripts are not free software. The 1.0.0 scripts do not have a license. The old license said "all your code belongs to us".
Too much is done with global variables and static methods.
The directory structure is not well defined. Static files are mixed with variable files in the root directory. There should be a well-defined structure to allow read-only mounts and better backups.
There was a lot of feedback about this page on the RunUO forum. Some people told me I am totally wrong, but either gave no reason, or reasons which had nothing to do with my argumentation, or even logically flawed reasons.
Others (including RunUO team members) called that "design decisions, not flaws". I think that's more a matter of personal opinion. Remember the old Microsoft saying: "It's a feature, not a bug"!