# Frequently Asked Questions

## How was build 550 chosen?

A mixture of reasons:

* The early HD era is my favourite. In particular, I like the 'clean'-looking
  tabs in the game frame, and 550 was the last build with those. I also
  considered 530, but 550 has a better built-in world map viewer (it supports
  dungeons in addition to the main surface).
* Availability of the original loader, client, game unpacker and jaggl jars.
* Availability of a large proportion of the original client data files.
* Availability of a large proportion of the location file encryption keys.

## Why do the OpenRS2 Natives use Maven instead of Gradle?

[nar-maven-plugin][nar-maven-plugin] is, at the time of writing, significantly
better than Gradle's support for building native code. Gradle's new C++ plugin
simply doesn't provide enough features.

## Why rewrite the client's native libraries?

There are a mixture of reasons:

* Availability of the original native libraries. I struggled to find the
  original native libraries for 550, except for 32-bit Windows. While Linux and
  macOS natives are available for nearby revisions, they are not compatible with
  the 550 client.
* The original native libraries were not built for 64-bit Linux and macOS. While
  this was probably not a major problem in 2009, 64-bit architectures are now
  the norm.
* Non-x86 architectures like ARM and RISC-V are becoming more popular. If we
  start seeing a shift away from x86 on desktop machines, the native libraries
  will need to be built for those architectures.
* The original macOS jaggl native library is backed by an NSView, which was
  deprecated in Java 6 and removed in Java 7. Java 7 requires surfaces to be
  backed by a CALayer instead.
* I anticipate that at some point in the future the Linux AWT implementation
  will be ported from X11 to Wayland, which will require porting the jaggl
  native library from GLX to EGL.
* The switch away from OpenGL to newer graphics APIs like Metal and Vulkan might
  eventually necessitate the inclusion of OpenGL to Metal/Vulkan translation
  layers.
* I'm concerned about backwards compatibility and bit rot. The original native
  libraries were compiled 10 years ago, and at some point one of their
  dependencies might drop backwards binary compatibility.

## Why does OpenRS2 run its own development infrastructure?

Even though OpenRS2 does not distribute Jagex's intellectual property, there is
a risk that it could be taken down from a service like GitHub by mistake,
causing disruption. Running our own infrastructure allows us to keep backups of
data not held in the Git repository, such as issues. If necessary, we can switch
to a different hosting provider at short notice while retaining such data.

[nar-maven-plugin]: https://maven-nar.github.io/
