Open-source multiplayer game server compatible with the RuneScape client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openrs2/docs/faq.md

77 lines
3.7 KiB

# 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 user interface, 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 the complete set of original client data files.
* Availability of a large proportion of the location file encryption keys.
## Why does OpenRS2 use Maven instead of Gradle?
Gradle's task-based model is significantly better than Maven's fixed lifecycle
model.
However, Gradle's flexibility and rate of development has come at a cost of
worse IDE integration, to the point at which recent versions of IntelliJ IDEA
now delegate build actions to Gradle by default rather than attempting to
understand the project structure. This tends to be slower and consume more
memory than IDEA's built-in build system. While this setting can be changed, I
think it is a sign of the future of Gradle's IDE integration.
Furthermore, [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.
This might be a decision we revisit in the future.
## Why is OpenRS2 licensed under the GNU GPL?
As significant amount of work went into the development of OpenRS2. My aim is
to encourage community contributions rather than effort being duplicated across
multiple independent closed-source forks, making a copyleft license desirable.
I also wanted to frustrate commercial use, given OpenRS2 is itself developed
entirely non-commercially. While the GPL does this to an extent, the AGPL would
have been more appropriate. However, it would be far more difficult to enforce
the AGPL than the GPL, disadvantaging honest users who would have otherwise
obeyed the license.
A small number of modules (`deob-annotations`, `jsobject` and the native
library replacements) are instead licensed under the LGPL, as it needs to be
possible to legally link these modules with the proprietary client code.
## Why rewrite the client's native libraries?
Again, 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.
[nar-maven-plugin]: https://maven-nar.github.io/