FastCGI ARC Case 2008

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>
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

Sign up or Log in to add a comment or watch this page.


The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact