PORTABLE.NSD - pure TCL OpenACS
The portable.nsd project will all the OpenACS source code to execute outside the AOLServer environment. We will achieve this portability be redefining the AOLServer TCL API dependencies to support different deployment containers. The container responsibility is to map AOLServer functionality to functionality offered by the environment. Deployment environment include tclsh, tclhttpd, FastCGI, and Apache 2.0 (mod_tcl and Rivet).
The AOLServer functionality we need to implement includes the tcl api, registered procs, scheduled procs, registered filters, and global state (nsv's). AOLServer initializes a single interpreter and then clones it to perform it's multithreaded request processing. Our initial approach will be to treat the application as a single-threaded one, and ignore the issue of multiple interpreters, and the separation of the initializaton and request processing. Eventually we'll figure out some way to deal with singleton initialization behavior and page serving behavior (See the Presentation for a proposed solution).
Note: Portable.nsd is not an attempt to replace AOLServer's role as OpenACS' native deployment environment. It is intended to provide viable options to prospective users constrained to web servers, operating systems, or single-threaded TCL packages not directly or sufficiently supported by AOLServer. The intention is absolutely not to fork OpenACS but to provide an emulation layer that supports 100% of the current and future OpenACS codebase.
Also, it is outside the scope of the effort to try to run arbitrary AOLServer applications (see nstclhttpd ) . We're focused on the small subset of the nsd api used by OpenACS, which is eminently more doable.
Phase 1 - COMPLETED (9/2002)
The first objective will be to get OpenACS code to run outside of AOLServer using only tclsh. This will entail rewriting enough of the ns_api, and figuring out a way to call directly into the request processor without using a web browser or web server. TclPro & Komodo step debugging will be supported.
Phase 2 - ON HOLD (11/2002)
After we can initialize the TCL interpreter by running through the bootstrap process and can run the installer from the command line, it's time to work on returning HTML to the browser. This phase will primarily focus on connected initialized interpreters to tclHTTPD, because that's the simplest deployment environment and the one where we have the most control. We'll need to be able to interact with the request processor, and register filters and handlers.
Phase 3 - IN PROGRESS (12/2002)
Once the core is stable and running on tclHTTPD, we'll implement separate deployment containers for CGI, FastCGI and Apache, ensuring that OpenACS can run anywhere. We will also need to work on completely replacing AOLServer module dependencies like ns_xml.
Phase 4 is the blue sky phase. Once we're running pretty much anywhere, we can
mocked up = proc signature has been implemented, returning reasonable (but probably hard-coded) values
tclHTTPD = web pages running under pure-tcl web server
FastCGI = multiple independent interpreters capable of responding to FastCGI requests
Apache/mod_tcl = ns_ procs have been ported to mod_tcl API so that OpenACS can run under native Apache module