The humble screensaver occupied a peculiar niche in computing history, somewhere parked between demoscene and games. Ambient animations that gave your computer time to rest its weary CRT and protect from phosphor burn-in. Screensavers were a ubiquitous part of personal computing. The popularity of Berkley Systemโ€™s After Dark suite of screensavers on the early Mac was massive, and the โ€œflying toasterโ€ logo was iconic, worming itโ€™s way through popular culture. The form seemed anachronistic after cheap LCD monitors gained dominance, which is a shame, because the screensaver was an important space where creative computing gained eyeballs, without a lot of judgement or expectations. For periods of time computers bucked their own economic uses, frivolously knitting fractals or scattering pixel-thick lights across an imaginary skyline. At their peak, screensavers defied their workplaces and hammered away at distributed computing tasks for the greater good, like SETI@home or Folding@home, - In stark difference to the cryptocurrency mining schemes of today, which are by some accounts actively destroying the planet in a singleminded attempt to consolidate wealth.

It was the history of screensavers and the unique role they fill (and maybe even their supposed obsolescence) that made me want to make one for a portfolio piece recently. Iโ€™d made Quartz Composer screensavers years ago that were still functioning, so it seemed like an easy target. On the Macintosh, Appleโ€™s Quartz Composer app enables node-based visual programming for designing with multimedia and interactivity. Compositions created in Quartz Composer were, at one time, first class citizens on the Mac and could be used natively as screensavers or dropped directly into Keynote decks. They are still usable just like clips in the visualist software VDMX, which makes it comparatively simple to make complex interactive work, in contrast to writing in lower level programming languages like C or GLSL. Lots of third-party plugins existed for QC, including those that could enable lighting control, or even run classic game emulators (with glitchable video RAM!). It was a toybox for artists, with a programming paradigm that encouraged experimentation and sharing.

Unfortunately as I was finishing my Quartz Composer Screensaver project, I upgraded to 10.14 (Mojave) and found that native Quartz Composer screensavers were disabled. This was following a long history of neglect and intentional deprecation of Quartz Composer by Apple, presumably due to security concerns and the planned future termination of OpenGL on the Mac. Creative computing platforms seem to all follow a narrative of having their simplicity and flexibility being impetus to put them in boxes, shutter them, or force them into subservience to accepted โ€œsecureโ€ programming ecosystems like javascript, and as the platform becomes safer, more efficient and more secure, the initial flood of hobbyist creativity subsides, and only those working โ€œprofessionallyโ€ can continue in the new ecosystem. The push from Flash towards html5 canvas elements was a pretty good example of this. While there were very compelling reasons not to allow embedded Flash media to run on the web, the resultant chilling of a huge and vital community of hobbyists was real and many did not take to the new platform as predicted. In the same way a fraction of the media available on VHS made it to DVD, and an even smaller fraction from DVD made it to Blu-ray, as the barrier to entry rises, thereโ€™s a narrowing of culture.

So how does one make a screensaver today? Xcode 10 still has a screensaver template, though itโ€™s basically an empty ObjectiveC shell (the template hasnโ€™t been updated to Appleโ€™s newer Swift programming language). I thought maybe Iโ€™d just be able to create a reference to my Quartz Composition in the Xcode project, using the QCRenderer class, but my Obj-C skills are next to nil, other than what Iโ€™ve picked up vicariously from working on my game Thunderbeam. Thereโ€™s no modern instructions online, and asking questions about screensavers on forums will largely get you confused looks. Creating a screensaver-like webpage using javascript and then packaging it up as an Electron app would work on Windows, which will run just about any executable if you add it as a screensaver, but Mac screensavers now presumably must happen through an Xcode wrapper.

This kind of head banging against platforms is what drives people with interesting ideas away from making art with computers, and itโ€™s a bad look for Apple. The idea I have only works within the context of a native screensaver, and going full conceptual and making something that only runs on a vintage computer just continues to ghettoize creative computing to barely noticed art-spaces. I can pretty easily make what I want in a number of different platforms, but itโ€™s the avenues of delivery that are important here, and they are narrowing as technology progresses, not expanding. The AppleTV has beautiful first-party screensavers, and making a screensaver for it would be an excellent workflow for say, Swift Playgrounds, but donโ€™t hold your breath.

As for finding other venues for this sort of short-form โ€œpointlessโ€ visual software- attempts to squeeze this sort of square peg into the round hole of games (a la โ€œNo player gamesโ€) is generally met with the hostility of an audience expecting something else, and wanting those expectations met to a T:

So, hey, Apple, toss me a bone and let me use a Quartz Composition, or a Processing Sketch, or, Jesus, anything other than Objective-C to make my screensaver?

(This goes out to the brave warriors of #screensaverjam !)


update One of the people I reached out to about my problems getting screensavers working in mojave was Bjorn Johansson, who writes:

I tried setting a QC file as the screen saver just to see what the message says. And just like I thought, itโ€™s the one about โ€œโ€ฆ with this version of macOSโ€. That message is extremely poorly worded and basically translates to โ€œsomething is wrongโ€. It can appear for any number of reasons, and none of them has ever been directly related to the version of my OS when Iโ€™ve seen it. Iโ€™m 100% certain that itโ€™s not at all indicative of a conscious decision by Apple to stop allowing QC files to run as screen savers. Also, itโ€™s not really a proper error message. For system generated error messages you have to check the console. And selecting a QC file as the screen saver generates quite a bit of output, but itโ€™s these two lines that I think are the relevant ones:

Unable to load Info.plist exceptions (eGPUOverrides) -[ScreenSaverModules loadModule:frame:isPreview:] -- Can't load bundle at path <private>

Googling the first line shows that multiple people working on other types of apps are getting this error message and the conclusion seems to be that itโ€™s caused by a bug in Mojave. The .plist file can be, or perhaps always is, crucial for running apps and screen savers.

Seeing that this is a well known bug Iโ€™m guessing it will be fixed in a future macOS update and that all you need to do is wait it out.