Zuul No Longer

Zuul was yet another PHP front-end for the p2p app MLDonkey. Currently no version of Zuul works properly against current versions of MLDonkey, and it's very unlikely that any development work will continue on Zuul. A project named Web-GMUI has been forked which is staying current with more recent MLDonkey releases, so it's recommended that you use that instead. Zuul file releases are no longer available, though the CVS repository should still be available. For information on that, see our project page at sf.net. Feel free to contact CJ about anything Zuul-related, but note that he hasn't actually used Zuul in almost two years now.

If you care to know why development of Zuul has stopped, feel free to read this incredibly boring description:

  • Zuul, like all other web-based MLDonkey frontends in the past, used the telnet protocol to communicate with the MLD Core.
  • Unfortunately, there was never any promise of stability in the telnet protocol, and the protocol was liable to change, sometimes dramatically, from release to release.
  • During one period of very active MLDonkey development, the telnet protocol was changing very often, and the Zuul devs decided that they'd had enough and weren't going to try and keep up with the somewhat arbitrary changes to the telnet protocol.
  • Instead, work began on PHP support for MLDonkey's Binary Protocol, which was the protocol GUI systems were supposed to use anyway, as it ensured forwards-compatibility with future MLDonkey releases, so a Zuul version released now would still work against MLDonkeys released years from now (theoretically, at least).
  • We got the framework for Binary Protocol communications up and running well, but it soon became apparent that the protocol was very much designed with long-running GUI processes in mind, and not the usual web model of connect-grabdata-disconnect. These design decisions, in the end, made it actually impossible for a web system such as ours to get certain bits of data from MLDonkey Core that we needed.
    • (technically this is a lie - if we ran the protocol in Polling mode (or possibly non-polling mode; I forget which at the moment), then the MLDonkey core would send its entire status to Zuul upon connecting, at which time we'd be able to grab whatever data we needed. However, this meant that for every single page load, we'd have to parse and load every single bit of state kept in MLDonkey. That situation was just completely unacceptable to us.)
  • So, we are left with two routes to follow:
    1. Add Support to the Binary Protocol. The main MLDonkey devs don't seem to have adding support for these kinds of things into the core, most likely simply because they've got other things to work on and the new opcodes required would be of no benefit to them. CJ spent a bit of time poking around the OCaml code in MLDonkey to see if we could come up with our own patches to MLDonkey, but the impetus to learn a new language just to add this kind of support just wasn't enough to sustain interest long enough to get it done.
    2. Wait for an XML interface to MLDonnkey Core. Apparently there is an XML interface in-the-works for MLDonkey core. While it would be a little disheartening to throw away all the work that we did on getting the binary protocol to work, an XML interface would take care of all of the problems that we have been having. This seemed very promising at the time, but hasn't actually materialized yet, and since it's been so long since any of us have actually used Zuul, there's really no impetus for us to do anything about it even if XML support becomes a reality.