ShadowM's Q-Link Page(last updated 2015-03-16)
Quantum Link (Q-Link for short) was an online service for Commodore 64 users that started in the mid-80s and ran until Hallowe'en 1994 ("Sunset" announcement); it later went on to become America Online (AOL). Here's a video of a Q-Link session from 1989, digitized by Raymond Day; you can even hear his modem dialing in at the beginning. This is a promotional video from 1986 done by Q-Link's ad agency. And this is a video of Q-Link's predecessor, PlayNet (there's a photo of the PlayNet sample disk to the right, and here's a D64 image of it). I was a PlayNet subscriber myself, briefly, and was on Q-Link from summer '87 until the night it went dark.
In 2005, the original server (which was accessed via modem over a phone line) was reverse-engineered by Keith Henrickson, Jim Brain, and others, and released as a TCP/IP server written in Java. It had its debut at the SWRAP 2005 expo, where it generated tremendous excitement (here's the video I took of Jim's presentation at the show).
Unfortunately, few people joined the project to code, and interest began to fade. I gave a presentation at ECCC 2008 called "Hacking the Q-Link Source: How to get involved in the Q-Link Reloaded Project", but eventually the original server was no longer running. Rather than watch Q-Link fade into oblivion a second time, I ran a server myself for a while and made the source available in Subversion. I'm no longer running a server, but jasmaz has one at q-link.net:5190. The source code is still available here.
There's a recent (2014) project to re-create Habitat/Club Caribe on a Stratus VOS machine (which is what the original Q-Link server ran on); they have a machine donated by Stratus and some of the original Habitat source in C and PL/I. In early 2015, they announced that they now have access to some of the original Q-Link source code (although it has not been made available publicly).
Connecting to Q-Link
Tips for using Q-Link
The Q-Link Reloaded Source Code
To Do List/Status
You can connect to jasmaz' server using the Q-Link client disk (not a web browser) at q-link.net:5190. Here's a disk image of a fresh Q-Link disk.
Here's the Club Caribe disk (again, not supported by Q-Link Reloaded). Note that side B is raw data (no directory or track and sector pointers). In fact, the contents of the directory header sector read as follows:
"HI HACKER! DISK 0 VERSION 0 HABITAT (C) 1987 LUCASFILM LTD. PROGRAMMED BY CHIP MORNINGSTAR, F. RANDALL FARMER, ARIC WILMUNDER, JANET HUNTER ... HABITAT DATA ... SONDS [sic] BY CHRIS GRIGG ART BY GARY WININNIC ... HAVE FUN!"
Here are some tips on getting the Q-Link client up and running; see also
If you have trouble connecting, the easiest way to verify whether it's your setup or the server is to telnet to port 5190 on the server. Hit Enter a few times; you should see this:
TERMINAL=If you get that, the problem is probably the way you have your Q-Link client configured.
You should connect to Q-Link with a real Commodore 64 (although it's possible with an emulator). The Q-Link client uses a serial connection; you cannot connect with a Commodore 64 Ethernet card (e.g. 64NIC+, Flyer, &c.). The most common way of doing it is to use a serial interface plugged into the user port of the '64, with a null-modem cable running to the serial port of a PC. On the PC, you run software which translates the serial data coming from the '64 to TCP/IP network packets, which get sent out over the internet to the Q-Link server. Your '64 is none the wiser, and thinks it is connected via modem. Most people use tcpser for this, which is available in most Linux distributions. You pass it the same dummy phone number you used when setting up Q-Link (see below). The command I use to start tcpser under Linux is:tcpser -d /dev/ttyS0 -s 1200 -i"e0&k0&c0" -n"5551212=<server's hostname>:5190" -tsS
For this configuration, I use the Hayes-compatible settings in Q-Link. Note: if you have trouble using the URL, try the server's IP address, which you can find by using ping or nslookup.
*** Channel 1 Baudrate 1200, I/F Mode 4C, Flow 02 Port 00000 Remote IP Adr: 192.168.001.205, Port 05190 Connect Mode : D5 Disconn Mode : 80 Flush Mode : 00
With both a Lantronix and the VICE emulator, I use the manual dial settings in Q-Link; just hit Enter when prompted to dial Q-Link.
If you want to use an emulator, naturally all your friends will make fun of you, but it can be done. Here's how I got it to work using the VICE emulator under Linux. The main idea is to get VICE to use netcat to do the serial-to-TCP/IP translation that software or a Lantronix box does when using a real '64 (note the pipe symbol in the last screenshot). See your system's documentation for netcat (or nc; on some distros, those two names point to the same program). A helpful Mac user advises that the version of nc supplied with OS X may be broken and that it would be better to build GNU netcat instead. Beware that netcat (or nc) may still be running after you exit Q-Link, holding open the local port you are trying to use. You may need to restart VICE between runs, or even exit VICE entirely and kill the netcat process.
device: run a program
program to run
program and parameters
(use q-link.net, not lyonlabs.org)
The Q-Link Reloaded server code was released under GPL. I checked out a copy from the trunk on 2011-08-13 and checked it into my own Subversion repository, and I've made it available to anyone who wants to study it. (Note: the repo was upgraded to Subversion 1.8.8 when this server was updated on 2014-04-20.) I've made only a few small changes; you can check the revision history to see. Here are the URLs:
source browsing (ViewVC): http://www.lyonlabs.org/viewvc/qlink
Please don't download the ViewVC pages themselves. ViewVC is for browsing the code online.
svn checkout: http://www.lyonlabs.org/svn/trunk/
To checkout the source from Subversion using the command line,
change to the directory you want it in and use this command:
svn co http://www.lyonlabs.org/svn/trunk
Subversion is available in all the major Linux distros; you can also download it for many operating systems here.
I'm also making available my notes and SQL recipes to help in exploring the source; there's information in my ECCC slides that may be of interest as well. If you find any errors, please let me know (shadowm at lyonlabs dot org). The best protocol reference I've seen so far is in the reference/protocol subdirectory of the source (see "Commands", starting at line 77).
For NetBeans users, here's how you can check out the code and create a project:
If you like, instead of just including martyr.jar in the second-last step, you can extract the entire martyr IRC library from this tarball and set up a NetBeans library, in order to get code completion. From NetBeans' main menu, select Tools / Libraries, create a new library called martyr-0.3.9, and fill in the blanks. Classpath is the jar file, and Sources is src/ where you extracted. There's no formal Javadoc, but there are API descriptions that will pop up when you do code completion.
To create the database, make sure you have MySQL installed, then follow the instructions in Mike Naberezny's notes, which you can find in reference/mike_n/01-getting-started.txt in the directory where you checked out from the repository. Make sure to add the extra tables he mentions; there are also a few changes that need to be made to correct null dates.
There's quite a lot of reference material, graphics, disk images, comm dumps, &c. in the tree, including Keith Henrickson's original reverse-engineered server, written in C++. As Keith did much of the original work to decode the Q-Link protocol, it's only fair to mention this thread, which contains a response that looks like it's from him. I know there have been bounties in the Commodore community before; getting Keith to do more work on the project certainly seems like a good reason for one.
As far as documentation goes, the main thing we need is a clear and concise description of the Q-Link protocol. There are bits and pieces in the references directory of the source (the best one is here, under "Commands" at line 77), but we need an easy-to-read document that says "To do that, send instruction XX with code like this."
The biggest thing missing in the protocol implementation is the routines surrounding the download and upload of files: the necessary commands to display the menus for browsing and selecting them (and uploading descriptions).
An administrative tool is needed for things like user maintenance, editing bulletins, and so forth.
//who command broken Probably the most well-known bug in Q-Link Reloaded is that in chat, using the //who command may not only trash the user's session, but make it impossible to get back into chat at all, even after restarting the '64 and signing back in. It won't happen every time, so you'll sometimes see users claiming that it works... only to disappear on a subsequent use of the command. Here's a server stack trace from someone using this command... and here's another.
"stuck" account A person's account can sometimes be "stuck" in a signed-on state, giving the user the message "This account is already signed on" and emitting an entry like this in the log when the user tries to log in again. (This stack trace may be the cause of such an event; it occurred at about the same time a user reported it.)
posting doesn't always work Here's a server stack trace from someone trying to reply to an existing post on a message board.
It's been reported that when an online game ends, one player returns to People Connection normally, while the other experiences a crash of the Q-Link client.
SQL errors There are a lot of places where SQL statements are generated without proper hygeine (doubled single-quotes, &c.). Generally speaking, the database layer could use some attention.