Status: on hold, stale; 2005-2008
Since perhaps 2005, I have been working on ideas for a "computing platform" that would help people do their computer work faster and better. It consists of programming language, desktop/UI, and operating system components inspired by the common principles of maximizing expressive power, assisting the user, and overcoming the limitations and tedium of today's tools. A possible name for the platform would be "Utop", a play on "Universal Desktop" and "Utopia"; as of 2008-05-27, I couldn't find any other software by this name on Google.
My ideas for this platform are largely inspired by my experiences with the strengths and weaknesses of existing tools; they have already evolved significantly and I expect that they will continue to evolve as I gain more experience. Here, for the sake of inspiration and discussion, I'm presenting my ideas as they currently stand, written in present tense for readability even though everything is tentative and speculative. If you have comments or can direct me to past or present work along similar lines, I would be much obliged if you would email me.
The platform is to have the following components and characteristics:
Language. A language for specifying and manipulating data and functions as a special kind of data, in lambda-calculus style. It is more than a programming language: it is also suitable for writing configuration and specification files of various kinds (which are really just specially structured data) and spreadsheets (which blend data and computation).
The focus on data originated in my work on "constructive-type C++", a modification of C++ in which I tried to remove idiosyncrasies in the type system, beginning with the replacement of T *ptr; with the "constructive" syntax &T ptr;. Later I noticed that an Eclipse "search for references" to a Java element finds references in plugin.xml files too. I imagine the Eclipse developers had to put that in as a special case, but if the language covered specification files like plugin.xml, such references would be found with no extra effort.
Here are some more detailed ideas for a "Pure Imperative" programming language; they are illustrative of my thinking but I'm not sure how much I still like them.
Environment. Each process has an environment through which it discovers its configuration settings and the libraries, programs, and servers it is to rely on. A subprocess's environment is inherited from its parent's by default, but the parent can override parts of it. Actually, the environment itself specifies the subenvironment to be taken by each kind of subprocess. In this way, one can pass a special option to a small part of a large system simply by appropriately configuring the master environment, without having to modify the entire system to pass the option along. For example, even if my Web server and rsync use the same environment option to enable debugging, I can pass a specially tweaked environment to the Web server that causes debugging to be enabled only for any rsync processes that the Web server directly or indirectly executes.
A software package manager combining the best ideas of systems such as RPM and OSGi maintains the software portion of the environment. It can be used at many levels simultaneously, e.g., for system-wide and user-specific software and for individual test sandboxes.
Minimum-overhead bug-fixing. The process of finding, reproducing, and fixing bugs (in free software at least) is streamlined. When a UI element malfunctions, the user can pick it out onscreen using a special keystroke and obtain a precise identifier for the element to use when searching for known bugs or submitting a new bug report. Furthermore, she can send a "reproduction bundle" that encapsulates the actions she took so the developers can see the exact problem she is talking about.
Additionally, the user can jump from a failing API or UI element to its source code in a single step (and a wait for the system to download the source code). If the problem is something obvious, she can modify the code and start using the fixed software in a single step (and a wait for the system to recompile the software). I currently maintain a custom version of Fedora's evolution-data-server with the one-line fix for this minor bug, and I find the process of patching the RPMs very tedious; there is plenty of room for better tooling/automation to reduce the overhead.
Deployment. The IDE can be used to deploy servers and Web sites by composing and configuring components. A Web server is a single object that the user can instantiate persistently and configure with a document root and possibly other settings. It exposes a port that the user can access privately with a Web browser or, with appropriate privileges, attach to a machine's IP port 80. A Web application like MediaWiki is likewise a single object that can be wired up to part of the Web server's URL namespace. The application automatically seeks a DBMS (such as MySQL) in the environment to host its database; the database is stored by the DBMS for efficiency but logically belongs to the application and is copied/deleted with the application. This approach makes a performance-tuned client-server DBMS as convenient to use as SQLite.
Many deployable components will provide separate administrative and access-controlled interfaces meant for use by the sysadmin and attachment to a public port, respectively; the administrative interface avoids the need for special modes like mysqld's --skip-grant-tables. A user setting up an application for his own use might just use the administrative interface for everything. Thanks to the platform's virtualization capabilities, all deployments are fully portable and can be done in unprivileged accounts, except to the extent that they need access to privileged services (such as SMTP and attachment to port 80) to perform their functions. One can always use "pretend" versions of those services (here, a SMTP server that just accumulates sent messages in a maildir, and a private port) for testing.
Here are some existing projects that I or others have identified as potentially relevant to the platform. The list is not exhaustive, but I intend for it to grow.