We changed the cpu protocol between editions. The change was to get rid of the second connection for notes. This was a good suggestion from Dave Mazieres at MIT. You can convert the 2ed cpu.c to run on 3ed. Here's the diffs: % diff cpu.c /sys/src/cmd/ocpu.c 21a22 > int filter(int); 26a28 > int fflag; 30,31c32,33 < char *srvname = "cpu"; < char *notesrv = "cpunote"; --- > char *srvname = "ocpu"; > char *notesrv = "ocpunote"; 39a42 > int fdd; 50a54,56 > case 'f': > fflag++; > break; 109a116,118 > if(fflag) > data = filter(data); > 124a134 > va_list arg; 126c136,138 < doprint(buf, buf+sizeof(buf), fmt, (&fmt+1)); --- > va_start(arg, fmt); > doprint(buf, buf+sizeof(buf), fmt, arg); > va_end(arg); 183a196 > 185c198,202 < if(amount(fd, "/mnt/term", MREPL, "") < 0) --- > > /* push fcall */ > if(fflag) > fd = filter(fd); > if(amount(fd, "/mnt/term", MCREATE|MREPL, "") < 0) 282a300 > char dir[4*NAMELEN]; 285c303 < if((*fd = dial(na, 0, 0, 0)) < 0) --- > if((*fd = dial(na, 0, dir, 0)) < 0) 288a307,308 > if(strstr(dir, "tcp")) > fflag = 1; 318a339,366 > > /* Network on fd1, mount driver on fd0 */ > int > filter(int fd) > { > int p[2]; > > if(pipe(p) < 0) > fatal(1, "pipe"); > > switch(rfork(RFNOWAIT|RFPROC|RFFDG)) { > case -1: > fatal(1, "rfork record module"); > case 0: > dup(fd, 1); > close(fd); > dup(p[0], 0); > close(p[0]); > close(p[1]); > execl("/bin/aux/fcall", "fcall", 0); > fatal(1, "exec record module"); > default: > close(fd); > close(p[0]); > } > return p[1]; > } > You also need to create the /rc/bin/service files on 3ed for the 2ed ports: % cat > /rc/bin/service/il17006 << EOF #!/bin/rc exec /bin/ocpu -R EOF % cat > /rc/bin/service/il17006 << EOF #!/bin/ocpu -N EOF % cat > /rc/bin/service/tcp17005 << EOF #!/bin/rc exec /bin/ocpu -f -R EOF % cat > /rc/bin/service/tcp17006 << EOF #!/bin/ocpu -N EOF % chmod +x /rc/bin/service/*1700[56] You can then use ocpu to get back to 2ed. I'll put these puppies in the next update.