Hello, everyone!
This is the third TinyMUSH/Mac update bulletin, sent to those who have sent me mail regarding TinyMUSH/Mac. There is no mailbot involved. If you don't want to receive the bulletins, tell me so.
Yes, all of you who were wondering if you were really going to get mail about TinyMUSH/Mac or if that was just an idle promise/threat can now relax and get on with your lives. :-)
I attribute the long delay between bulletins in part to the terrific stability of TinyMUSH/Mac 0.6.0b1 -- I've received numerous questions, but only one bug report, and its claim (that running two copies of Netmush on different ports crashes both) proved to be false in my tests.
I'd say that's pretty damn good.
On the other hand, there are what I consider serious limitations in Netmush still. In particular, all memory requested by the MUSH codebase is allocated in the application heap using NewPtr. If your database increases to a size that requires more memory than is available in the heap, then some kind of failure will occur. While very likely to be a memory request in MUSH, the failure could also occur during processing of a received Apple event, which I think will cleanly if inelegantly throw an exception, or some other unforeseen area, with unpredictable results. And MUSH's ability to cope with failed allocations is not to be depended on -- I already found one piece of code that tries to deallocate the (null) pointer. I also advise against running out of disk space.
Remember, back up your database. A lot.
I simply couldn't bear it any longer -- I'd implemented the Apple Event Object Model, added scripting terminology, distinguished the instance from the server, divested the help index files, eliminated memory leaks... I needed to release! So instead of waiting to bring Game Wiz up to date, I posted a pre-release Netmush distribution, with drop-in replacements for Netmush and TinyMUSH/Mac Changes. Game Wiz still works, in a limited sense, but you'll need another application (like, say, Script Editor) to start up and shut down the instance or reset the database.
MakeIndex and the .indx files are going away -- Netmush indexes the help files itself now. Game Wiz can already display a list of a server's instances, and the upgrade will send them messages to start up, shut down, etc. There will probably be other goodies as well -- I imagine wiring Get Data and Set Data events to the config options (subsuming the functionality of @admin and @list options) would be tremendously useful, especially when you can't log in because your site isn't permitted, and you can't change it with @admin permit_site because you can't log in.
Also planned in the near future is per-instance data storage. In other words, putting all files specific to your MUSH somewhere other than the TinyMUSH/Mac folder.
A number of people have asked to see the source code to Netmush. Previously, these requests have been met with my stinginess, with predictable outcome. However, upon examining the MUSH copyright notice and the GNU General Public License (under which I've determined my work falls because I'm using GNU DBM, and under which MUSH itself may fall because it includes GNU malloc), I've concluded that by letter and spirit I must make my source available, and that the "software hoarding" to which the GPL refers is exactly what I've been up to. But I'm not committed to hoarding software, whereas I am committed to being a stand for creative empowerment through authentic cooperation and passion for learning. (In other words, writing and helping others write kick-ass software.)
So I give up being stingy. I'll have to completely revamp the TinyMUSH/Mac License (which you did read, didn't you?), and I will begin to distribute snapshots of the Netmush source, including the Apple Event Assistant class library that it requires. But be forewarned: At this time, the source code is not fit for human consumption! It may be documented poorly or not at all. What's distributed will not be a formal 'release' as such, but just a sample of whatever's there at the time, which is why it's called a 'snapshot'.
Since making TinyMUSH 2.0.8-p10 stable on the Mac, I've had time to think about where to go next. An obvious option is to pursue other, more recent versions and descendants of MUSH. But putting the level of effort that I have into a series of ports that run on the Mac with no increase in functionality just doesn't light me up. Another is to make TinyMUSH/Mac its own codebase and keep improving it (which doesn't excite me either).
A third possibility, which I believe is what I had in mind all along when I began hacking at the code a year and a half ago, and which I'm now committed to, is to use TinyMUSH/Mac as a structure around which to build a generalized game server. All functionality that is common between different games, such as TCP connections, database storage, online help, logging, etc. will be factored out of the monolith and into discrete modules, much of it getting reimplemented in the process. What remains will be the distinguishing characteristics of TinyMUSH 2.0.8-p10: the parser, which turns typographical commands into semi-semantic 'actions', what I call the 'reality server', which accepts actions and applies them to a 'universe', often resulting in 'events', and the event renderer, which turns events into typographical feedback. Once the separation is complete, it will be a much simpler matter not only to port other games, but to create new ones. That is the project.
The TinyMUSH/Mac Web page remains <http://www.metamage.com/mush/>
, and FAQ answers may be found at <http://www.metamage.com/mush/faq.html>
. Source code will be available Real Soon Now. :-)
Josh