The MGR Window System

Note well that this is mostly of historic interest. I haven't done any work on MGR for many years. MGR itself has gone into oblivion for most uses, largely being replaced by the much more feature filled X Window System. I have kept this around because people seem to link to it.


MGR, sometimes said to be short for "ManaGeR", sometimes short for "Munger", is a simple network transparent window system. It was originally developed for the Sun 3 series of workstations by Stephen Uhler and colleagues beginning in 1984 while at Bellcore (later Telcordia, now part of Ericsson) and later enhanced by many others.

The window system ran on many different hardware platforms, at least these: Sun 3/xx workstations running SunOS, which was the the original development platform, Sun SPARCstations (SunOS and then ported by me to Solaris), Intel x86 based PCs (Coherent, Minix, FreeBSD or Linux), Atari ST (under MiNT), AT&T UnixPC (SysV) and the Macintosh.

The entire MGR source code was posted to Usenet in 1989, comp.sources.unix Volume 17, Issue 1. A lot of people picked it up.

Personally I first got acquainted with MGR while using Sun 3/50 and 3/60 workstations at the Lysator Academic Computing Society at Linköping University in 1991.

Many people at Lysator prefered MGR instead of using Sun's own SunView (nee SunTools) and, later, many still preferred MGR instead of running the X Window System. X, even on the high-end 3/80 workstations we later had, was not a pleasant experience, probably mostly because of memory starvation. It wasn't until we had SPARC CPUs that most users started abandoning MGR.

The old MGR HOWTO had this to say about MGR:

MGR (ManaGeR) is a graphical window system. The MGR server provides a builtin window manager and windowed graphics terminal emulation on color and monochrome bitmap displays. MGR is controlled by mousing pop-up menus, by keyboard interaction, and by escape sequences written on pseudo-terminals by client software.

MGR provides each client window with: curses-like terminal control functions, graphics primitives such as line and circle drawing; facilities for manipulating bitmaps, fonts, icons, and pop-up menus; commands to reshape and position windows; and a message passing facility enabling client programs to rendezvous and exchange messages. Client programs may ask to be informed when a change in the window system occurs, such as a reshaped window, a pushed mouse button, or a message sent from another client program. These changes are called events. MGR notifies a client program of an event by sending it an ASCII character string in a format specified by the client program. Existing applications can be integrated into the windowing environment without modification by having MGR imitate keystrokes in response to user defined menu selections or other events.

If you want to compare MGR to the X Window System, you might consider the MGR server as something like a combination of an X server + window manager + xterm, but with xterm's Tektronix 4014 graphics terminal emulation and its DEC VT100 emulation in the same window.

A window in MGR doesn't emulate any existing hardware terminal. It has a new set of terminal codes combining text, vector graphics and basic bitmap graphics. See the termcap entry in the distribution.

Compared to X11, MGR has a very small memory footprint and demands very little of the graphics hardware. MGR isn't very fast on graphics and doesn't provide any form of access to direct access to framebuffers or hardware acceleration as modern X servers do. It is, however, comfortably fast for every day use if you mainly use text windows and occassionally view an image.

MGR was usually run on the same workstation where most of the programs ran but an MGR window is completely network transparent. Indeed, there is not even a need for a network: If you run, say, kermit and use a dial-up modem in an MGR window you can run graphical programs on the other end just as easy.

Included in the MGR distribution there are also no less than two multiplexer programs (rmgr and mtx), which makes it possible to run several remote programs in their own windows over the same connection. rmgr works surprisingly well over a modem connection, although it's certainly less painful if you have at least 9600 b/s.

These are the remaining MGR files I could find in my directories. Perhaps it might be interesting for some of you.

I once ported the MGR server and many MGR clients to Solaris and started on a port to SPARC/Linux. For a long time I couldn't find the source code of my porting efforts. The only trace was the working binary for Solaris/SPARC included below. Recently (2013) I discovered a tar ball with what seems to be the Solaris port. I have included it below. I have no way of verifying that it works, however.

The source tarballs below might not compile out of the box on modern systems. You might need to tinker with it in some ways. Most likely, you will have to be sure that the binaries in src/tools are successfully built first, otherwise the server won't build.

If you would like to hack MGR, one nice thing to do would to use the stub libbitblit and write calls to the Linux fb device or use something similar (SDL, perhaps?). This way, MGR could live again and this time on modern graphics hardware. If you pick this up, please notify me. I would be a nice hack.


This screenshot was taken on a Sun SPARCstation ELC workstation running SunOS:

Click on the image above for the real screenshot.


Last updated: <2013-09-06 12:26:45 CEST>