PLT Scheme as an Operating System Entry: services Date: Sun Apr 20 11:41:33 EDT 2008 I'm thinking about making these frontends be interactive, and possibly asynchronous? There are 2 possible models: RPC: IN = command line OUT = stdout OBJECT: INIT = command line IN = stdin OUT = stdout The latter seems to capture everything i can think of. Each command should have formatters for INIT and IN, and a parser for OUT. An important early design choice is the use of open connections: since this needs to run over ssh, and small devices have a long ssh setup time, keeping a connection open should be a priority. What's necessary, is an interface to a command shell. So. What is this? * a wrapper around 'shell', for whatever target (uC/forth, busybox) * scheme (host) side: gives/takes structured expressions (parser/formatter are on the scheme side) * target side: - minimalistic (small targets) - efficient binary transfer (means prefix protocol) how does this differ from scsh? first, i'm not happy i can't run scsh in plt, since that seems halfway there. porting it seems really not trivial, since there's a lot of C code. on the other hand, i'm not happy i can't get scsh/scheme48 to run on openwrt either.. probably a better approach, and closer to the tethered approach used in brood, and to be packetforth2. this might be an interesting side project to tackle some of the ideas of hierarchy of complexity: small sattelite nodes (8k UC -> 32M embedded) driven by bigger nodes (1G). Entry: goal Date: Thu Apr 24 11:25:09 EDT 2008 * an RPC tool for targets that can't host full PLT, or where hosting a scheme is impractical. tasks: - OpenWRT router monitoring - distributed filesystem - fuse RPC -> filesystem interface - C code generation for target (unix) system maybe this should really be part of brood? with brood being "an integrated system for distributed development". Entry: Erlang lecture MIT LL2 workshop Date: Fri Apr 25 09:47:56 EDT 2008 Joe Armstrong talks about Erlang: concurrency oriented programming: * processes are totally independent, imagine they run on different machines. * process semantics: no sharing of data. (copy everything) * each process has an unforgeable name. (can't guess the name of a process: security) * given the name, a message can be sent * assume it fails: "send and pray semantics" * remote process monitoring erlang OTP Entry: parsing Date: Mon Apr 28 12:45:11 EDT 2008 since the core problem here is writing parsers for the command returns, it might be wise to go for the most powerful tool, which is the piumarta stuff (OMeta) http://www.cs.ucla.edu/~awarth/papers/dls07.pdf maybe the minimalistic forth monitor stuff can fit in here too? Entry: the wire protocol Date: Mon May 19 17:33:17 CEST 2008 I was thinking about writing a PLT binding to fuse, but in such a way that the interface code doesn't need to run in the core. Basicly, a small C wrapper app with an RPC protocol to a scheme instance. Nice, clean approach. But.. it requires the definition of a protocol that can be understood by the C side. How to tackle this problem? Preferrably by generating all the C code, including the protocol parse/unparse. Entry: unix domain sockets Date: Sun Jun 8 15:01:57 CEST 2008 socket-recv works fine, but i can't get socket->input-port to work. Entry: fuse Date: Sun Jun 8 18:36:27 CEST 2008 why do i need fuse? to be able to present a filesystem interface to some application for object that are managed inside a scheme core. instead of writing a fuse layer for mzscheme, it might be best to take one of the fuse applications that already exist and use the interface they map to. the list is here: http://fuse.sourceforge.net/wiki/index.php/FileSystems maybe WebDAV is a better solution? Entry: hmm... restate goals Date: Sun Jun 8 19:49:48 CEST 2008 PLT Scheme is an operating system. What happens if this is taken serious? How would one find out? Well... Make a VM, run plt scheme in it, and try to do stuff :) One thing i'd like an operating system to do is to store my data. Entry: taking it serious again Date: Tue Mar 31 16:50:26 CEST 2009 http://calculist.blogspot.com/2009/02/plt-scheme-operating-system.html http://calculist.blogspot.com/2009/02/plt-system-facilities-software.html http://calculist.blogspot.com/2009/02/plt-system-facilities-software_19.html http://calculist.blogspot.com/2009/03/plt-system-facilities-software.html QEMU + LINUX + LIBS + MZSCHEME Entry: static vs. dynamic Date: Sat Apr 25 23:45:16 CEST 2009 I'd like to write an "allways-on" system (an OS basically) using PLT Scheme. However, I've found the relyance on recompile/reload -- which makes lots of sense wrt. getting programs to work correctly -- to be a hurdle to get a smalltalk-style image up and running. How to solve this? There has to be a way to take the best of both worlds? Reload/recompile subsystems without taking down the whole. Basicly, In any system there are larger isolated parts that can be replaced at once, as long as the image stays up. Entry: a joke? Date: Mon Apr 27 10:36:07 CEST 2009 Is this a joke? No.. I'm sort of serious.. The only thing is: I need to find an actual problem to solve. The other thing is that I find the idea very exciting. It's probably a lot of work to get anywhere near something functional.. I keep thinking of emacs done better.. Maybe I should stick to emacs for the UI though.. I was thinking this morning about email.. There are 2 things about email: SMTP servers are a nightmare because of the way SMTP works on the wild internet, mail storage sucks, and mail clients suck. Am I going to fall into the abyss of writing my own mail client? Maybe.. But.. I had this idea of making a mail/message handling system tailored to my needs. Something with a proper storage/query mechanism and not too bad an interface. I was thinking about curses + something curses-like i can run in javascript. Another thing is a fast web client that will be able to play videos in a better way: i don't like video in the browser, and mplayer is still a lot faster. Entry: serialization of processess Date: Fri Jun 12 10:04:42 CEST 2009 I've been thinking about dumping memory images.. However, this is really messy: there is a lot of arbitrary state (cache) that is probably easier to regenerate from source than to serialize and revive. The simplest approach really is to use virtual machines. Note that in nature, genotype -> phenotype, but the latter won't get serialized either! Entry: Windows VM Date: Sun Jun 21 14:01:51 CEST 2009 I was thinking about installing Cygwin on a fresh Windows install of a PC to at least have some kind of decent console access without having to resort to VNC. But.. what about just running PLT as a service? I.e. for starters, a simple network repl.. Entry: eliminate hardware Date: Fri Jun 26 23:46:16 CEST 2009 You can't make money with software, only with hardware. Hardware busyness dictates everything. So, can we eliminate it? Can't we use all that technology to make hardware rediculously cheap to build in small volumes? Maybe the real question to answer is: what do we really need hardware for? If I look at all the equipement I own, most of it could be integrated in a single computer with a bunch of wires coming out to actuators and sensors. I have a netbook, but only because all the rest is too bulky to carry around, including the laptop. What I would like to do personally, is to turn all the computers I have into a single system. If for practical reasons they need to be in separate places then so be it, but the interface to the real logic that I _need_ it to perform should be made simpler. This should put everythin I do in another perspective.