CLtL actually says: "No **user** program should ever change the value of *terminal-io*." [emphasis added] Presumably it is allowable for **environment** managing code such as a window manager to play with *terminal-io* in a multiple process environment. Details left as an exercise for the implementor ...