How it fits together
Worlds is not one server. It is four independent services, and a world server on its own does not give you a working client. This trips up everyone at the start, so it goes first.
The four services
- WorldServer — TCP, a proprietary binary protocol. Presence, chat, movement, rooms and properties. Historic port 6650. This is the part this project implements, and the one the protocol page is about.
- The upgrade server — HTTP. Worlds, avatars and textures are downloaded from here. Both servers in this project have one built in.
- The script server — the Perl CGIs. This is where the permitted-avatar list lives. If the client cannot fetch it, every custom avatar in the room silently becomes the default figure — the single most confusing failure in Worlds, and it is not a broken avatar.
- WebWalls — actual web pages rendered on surfaces inside the world. Very much of its decade, and still a good idea.
Why there are two servers
Because they are for two different jobs, and mixing them would spoil both.
WorldServer: the reference
It exists to keep Worlds.com as it was. It speaks the protocol the original client speaks and adds nothing. A client from 2012, or any other implementation written against the original, behaves exactly as it always did. It is the reference and it stays that way.
AikoWorlds: where things happen
The same code with room to grow: persistence in SQLite, a capability announcement, extensions. It stays compatible on the wire, and it tells an older client, once, that it might see something it cannot draw.
If you want the original behaviour exactly, either server gives it to you
— set ANNOUNCE=0 on AikoWorlds and not one extra byte goes
out.
How the client knows which is which
Nothing is configured and nothing is guessed. The order of the conversation does the work: the server speaks first, and a client only sends its own capabilities after it has seen the server's. A server that never announced anything therefore never receives anything unusual — which is exactly what makes it safe to point an extended client at any other Worlds server, at the original servers if they ever came back, or at something built later.
Same arrangement Second Life and OpenSimulator arrived at: one viewer, two kinds of world.
What you need to run it
| For | You need | Guide |
|---|---|---|
| Playing | Windows, or Wine with a 32-bit JRE. The renderer is a native 32-bit DLL and there is no way round it. | Using the client |
| The modified client | Your own copy of the WorldsPlayer, JDK 8, a Java 17+ runtime for the decompiler, and a Wine prefix with a 32-bit JRE 1.6. | The modified client |
| Running a server | A C++20 compiler. Nothing else — there are no external dependencies. | Running a server |
| Content | Whatever worlds, avatars and textures you supply. The servers serve what you give them. | RWX avatars · The Shaper |