Including FastCGI 2.4.0 with OpenSolaris
15 December 2008
1. Summary and motivation
1.1. Introduction
This project delivers the FastCGI 2.4.0[1] Application Libraries into OpenSolaris
FastCGI is an open variation of the Common Gateway Interface (CGI) that dramatically
reduces the overhead of running CGI-like programs from a Web Server. It provides high
performance without the limitations of server specific APIs. It is by Web Servers
such as Lighttpd, Nginx and Zeus to communicate with Ruby on Rails and Python
backend processes.
The FastCGI Applications Libraries are the C and C++ libraries used by FastCGI
application developers for creating FastCGI applications and wrapper programs.
This case seeks Minor Release Binding.
2. Technical issues
2.1. Key objects
/usr/bin/cgi-fcgi
/usr/bin/{ISA}/cgi-fcgi
/usr/lib/libfcgi.so.0.0.0
/usr/lib/libfcgi.so.0
/usr/lib/libfcgi.so
/usr/lib/libfcgi++.so.0.0.0
/usr/lib/libfcgi++.so.0
/usr/lib/libfcgi++.so
/usr/lib/{ISA}/libfcgi.so.0.0.0
/usr/lib/{ISA}/libfcgi.so.0
/usr/lib/{ISA}/libfcgi.so
/usr/lib/{ISA}/libfcgi++.so.0.0.0
/usr/lib/{ISA}/libfcgi++.so.0
/usr/lib/{ISA}/libfcgi++.so
/usr/include/fastcgi/fastcgi.h
/usr/include/fastcgi/fcgi_stdio.h
/usr/include/fastcgi/fcgiapp.h
/usr/include/fastcgi/fcgimisc.h
/usr/include/fastcgi/fcgio.h
/usr/include/fastcgi/fcgios.h
/usr/include/fastcgi/fcgi_config.h
2.2 C++ Libraries
The FastCGI C++ Application library will not be included in the initial integration
as we are dependent on the Apache Std C++ Library. We will aim to add the C++ libraries
in time for availability with OpenSolaris 2009.04 but accept that there is a risk that
the timing may not allow for this. We will raise a CR to cover the integration of the
C++ Libraries.
2.3 Versioning
At any point of time there is only one FastCGI release available. The
current release is 2.4.0
2.4 Bindings
Many languages provide bindings for FastCGI (popular examples include
Perl, Python, Tcl, Ruby etc). Each of these languages provide the choice
of using either the pure language version or a version linked with
FastCGI library. These (native or pure bindings for the languages) will
have to be installed separately by the user, or in some cases will be built
specifically with the Libraries that this project delivers.
2.5 Directory Naming and Structure
The proposed directory layout for FastCGI is:
/usr
/bin
/{ISA}
/lib
/{ISA}
/include/fastcgi
/share/man
/man1
/man3
/share/doc
/fastcgi
The detailed directory and file layout for FastCGI is provided in
Addendum 1.
3. FastCGI Documentation.
Man pages for the cgi-fcgi executable and for the documented API calls will be
provided as part of the integration.
A master fastcgi man page will be provided. This will describe the location of the
key components of the integration. As FastCGI is often referred to as fcgi, this
man page will also be accessible as 'fcgi'. Both will live under section 1m on the
default MANPATH.
The FastCGI documentation will be delivered 'as is' in a separate package.
4. Packaging and Delivery
We propose to package FastCGI under the following usr packages:
SUNWfcgi - FastCGI 2.4.0
SUNWfcgi-doc - FastCGI 2.4.0 Documentation
5. FastCGI Interfaces
5.1. Interface Stability
FastCGI libraries first became available in 1996, the FastCGI project
released the last major version on 19th January 2003 although development
continues for mod_fastcgi at the same site. Despite this lack of development
FastCGI 2.4.0 is seen to be low risk and "Just works". It is widely used and was
integrated with Sun Java System Web Server 7.
5.2. Imported Interfaces
FastCGI depends on PSARC 2008/549 Apache Standard C++ Library[3], as well as core
Solaris libraries (i.e.: libc), but no others.
5.3. Exported Interfaces
NAME STABILITY NOTES
/usr/bin/cgi-fcgi Uncommitted Executable
/usr/bin/{ISA}/cgi-fcgi Uncommitted Executable
/usr/share/man/man1m/fastcgi.1m Uncommitted Man Page
/usr/lib/libfcgi.so.0.0.0 Uncommitted Shared Library
/usr/lib/libfcgi.so.0 Uncommitted Symbolic Link
/usr/lib/libfcgi.so Uncommitted Symbolic Link
/usr/lib/libfcgi++.so.0.0.0 Uncommitted Shared Library
/usr/lib/libfcgi++.so.0 Uncommitted Symbolic Link
/usr/lib/libfcgi++.so Uncommitted Shared Symbolic Link
/usr/lib/{ISA}/libfcgi.so.0.0.0 Uncommitted Shared Library
/usr/lib/{ISA}/libfcgi.so.0 Uncommitted Symbolic Link
/usr/lib/{ISA}/libfcgi.so Uncommitted Symbolic Link
/usr/lib/{ISA}/libfcgi++.so.0.0.0 Uncommitted Shared Library
/usr/lib/{ISA}/libfcgi++.so.0 Uncommitted Symbolic Link
/usr/lib/{ISA}/libfcgi++.so Uncommitted Symbolic Link
6. References
[1] http://www.fastcgi.com
[2] http://www.fastcgi.com/devkit/doc
[3] http://www.opensolaris.org/os/community/arc/caselog/2008/549/
================================================================
Addendum 1: FastCGI Integration Directory and File Structure.
1. The following files are included in the FastCGI integration:
/usr/share/man/man1m
/fastcgi.1m
/fcgi.1m -> fastcgi.1m
/usr
/bin
/cgi-fcgi
/bin/{ISA}
/cgi-fcgi
/include/fastcgi
/fastcgi.h
/fcgi_stdio.h
/fcgiapp.h
/fcgimisc.h
/fcgio.h
/fcgios.h
/fcgi_config.h
/lib
/libfcgi.so.0.0.0
/libfcgi.so.0
/libfcgi.so
/libfcgi++.so.0.0.0
/libfcgi++.so.0
/libfcgi++.so
/lib/{ISA}
/libfcgi.so.0.0.0
/libfcgi.so.0
/libfcgi.so
/libfcgi++.so.0.0.0
/libfcgi++.so.0
/libfcgi++.so
/share
/man
/man1m
/fastcgi.1m
/man1
/cgi-fcgi.1
/man3
/FCGI_Accept.3
/FCGI_Finish.3
/FCGI_SetExitStatus.3
/FCGI_StartFilterData.3
3/doc/fastcgi
/<various documentation files for FastCGI>