This is part of a series of articles from J. Scott Edwards about his pet project Objectify.
Right after Y2K I decided to resurrect a project I had started in the late ’70s to write an operating system. I started a project called EasyOS (1) on SourceForge to develop an OS based upon the best parts of Linux, FreeBSD, OpenBSD, etc. After toying around for a while I decided that part of the problem was that current operating systems are basically the same as the operating systems I had worked with in the 1970s, with the addition of a GUI. One example would be that all data is stored in files.
I decided that instead of using the same paradigms as existing operating systems, I needed to rethink those paradigms. I started another project: New World OS on SourceForge and in December 2004, I wrote an article for OS News about some of my ideas.
When it came time to start developing the system, I debated whether I should start completely from scratch; develop it from the hardware interface level and work my way up, or if I should start by testing some of my ideas on an existing system. If I started on top of an existing system I could see if my ideas were feasible, before dumping years worth of time into them only to discover that I had overlooked some fundamental flaw. I decided it made the most sense to test out some ideas on top of another OS first. To do releases on SourceForge I needed a package name. New World OS didn’t seem like a good package name because it wasn’t really an OS yet. I decided to call the package Objectify because it stored everything as an object. I often think that I should have called it Insomnia because almost all of it was developed while I should have been sleeping.
I started out storing the objects in files, each object in a separate file, but that proved to be cumbersome. I then tried storing all of the objects in a “sparse” file. Oddly, that ended up consuming gobs of disk space. Since one of my main ideas was to store objects directly on the hard drive and NOT in files, I ultimately decided to “just do it” and started reading and writing objects directly to an entire hard drive (like /dev/hdb) or a disk partition (like /dev/hda7). This worked quite well on Linux, but hasn’t worked on other operating systems like FreeBSD and OpenBSD, so I added the capability to substitute a regular file (like ~/.private.obj) for the block device (2).
One of the fundamental ideas, if not THE fundamental idea, was to eliminate storing data in files. I wanted to store data in a format more natural to the computer, so that a program did not have to read and convert it’s data from a file, do its thing, and then convert the data back to a file. I wanted the program to store it’s data in objects and then, only if the data had to be exchanged with another device, convert it to a file.
While I was working on the project, I had a collection of documents that I was scanning into the computer so I could shred the paper copies. However, since my project was not going to be ready to store these documents for some time, and I did not want to have the files sitting around on my computer or on DVD-R without encryption, I realized I could create a generic “FILE” object that would just store the file data until it was ready. I began storing my important documents in this manner in 2006 and now have over 3,500 files stored.
In January of 2007 I decided it would be nicer if the Objectify package had it’s own project on SourceForge, so I created an Objectify project. However, I have not completed the move so the CVS repository and the released packages are still under the New World OS project. The only thing I have in the Objectify project so far are the Bug and Feature Request Trackers.
I find it ironic that my initial goal was to eliminate the storing of data in files but currently that is the most developed function of the project. However, it is interesting to note that Objectify is inverted from other systems; instead of storing objects in files, it stores files in objects.
- In early 2005 someone else wanted to use the EasyOS moniker on SourceForge. Since I was concentrating on New World OS by that time, I let them take it over. So the EasyOS project that is now on SourceForge has no relation to my project.
- I have tested the code on FreeBSD, OpenBSD, and Cygwin. I have started trying to get it to compile on Mac OS X but there were a couple of POSIX functions that are missing on OS X and I haven’t had time to work through it.