Open-Source Development and Distribution

Toolcraft

Here is a cataloging of some of the artifacts, tools, and practices that are encountered when present-day open-source materials are commonly distributed for use by others.  The term "toolcraft" is used because the promulgation and use of open-source tools is by craft: use of methods and procedures that are learned and practiced and then accepted in a mainly-automatic and often-unconscious way. 

This material has been compiled so that participants in different toolcraft communities can decode open-source materials of interest to them.  It is also offered to the members of the open-source community as a reminder of how much understood context is relied upon in the practice of open-source development.   Participants in other development communities can look for the invisible toolcraft that provides a barrier to participation in their community.

Last Updated 2002-09-03-19:48 -0700 (pdt)


Content

Foreword

Finding Open-Source Packages

Open-Source Packaging

Primary Development Tools

Target Platforms


Foreword

Open-source projects have their own toolcraft: tools and practices for composing, managing and distributing the software elements.  Open-source toolcraft is freighted with private language and lore that infect the context in which open-source software is created, installed, used, and maintained. In this regard, the open-source community is as isolated in its craft as is any specialized technical community whose defining mutual interest is the mastery of a particular set of technical artifacts and the conceptual framework in which those artifacts are understood. 

Comprehending the toolcraft of a community is the entrance examination for meaningful participation in that community.  The appeal of the open-source toolcraft is that it is inherently set up for learning by doing.  The limitation of the open-source community, which is long on code, short on documentation, and sometimes antagonistic to disciplined methodologies, is that there is almost no way to operate in that community other than by hands-on experience with some pretty arcane technologies.  

Toolcraft is not unique to open-source development.  All collaborative technical communities develop toolcraft.  There is also a natural tendency for toolcraft to become invisible to the practitioners and inpenetrable to onlookers (including observers from different communities having kindred purposes).   Open-source toolcraft is both a barrier to entry for new participants and an instrument of efficient collaboration and communication for the established community.  The striking quality of open-source toolcraft is the extent of it, how much it is taken for granted, and the degree to which it imposes a conceptual model and learning curve that is no less burdensome to master than, say, the development craft of a large software development organization working on a closed, proprietary system using commercial closed-source tools.  At the same time, open-source development strives for visibility of the development process and having all of the elements amenable to inspection and verification.  This tends to flatten the world of open-source materials, grounding them all on the fundamental development artifacts, rather than there being well-defined levels of disclosure and usage.  There are two consequences: understanding of the materials and their usage requires some mastery of development toolcraft beyond what is required for users of commercial software; application of the materials is more readily available to those who have adopted the particular conceptual model and toolcraft in their development work, one that is optimized around a particular approach to Unix software development having Unix tools as part of the development platform.  This particular development-system view is a near-inherent feature of open-source toolcraft.  It is sufficient and appropriate to the purposes of the GNU Project, for example, yet more is required if there is to be greater appreciation and use of interoperable toolcraft on heterogeneous platform technologies beyond the reach of GNU (including GNU/Linux).

This compilation is designed for two purposes.  First, to make the prevalent open-source toolcraft more visible, so that it can be understood and appreciated by observers from different software development communities.  In this way, the offerings of the open-source community can become more accessible.   Secondly, I want to remind software developers of the amount of toolcraft that has become invisible and operated with in an unconscious way.   This applies to all development communities.  It is particularly important for the open-source development community which takes as a mantra having their contributions be accessible and valuable among members of a global community of practice, contribution and application.  

-- Dennis E. Hamilton
1999 November 9

Finding Open-Source Packages

Open-Source Packaging

We want to differentiate between packaging that occurs while a development or revision cycle is underway, and the interchange that is done as part of the collaborative development, and then what happens when a revision is complete and available for usage, adaptation, and providing the basis for further maintenance and revision.

Common Package Storage Organization

There are two forms of storage organization: interchange format and working file-system organization. 

Common Package Interchange Formats

Common Package File-System Organizations

Common Package Elements

.am
Automatic Make file. 
.c
C Language source code module. 
.gz
GZip (GNU Zip)
.h
C Language header file providing definitions used in C language source code modules by #include operations. 
.htm
HTML
.html
HyperText Markup Language.
.pl
PerL; Perl Language.
.pod
Plain Old Documentation.  A very simple text-file format for providing marked-up documentation files.  POD format is defined in the Perl specification.  POD is recognized by perl processors and can be embedded in a Perl Language file in a way that allows the .pl to be a single-source for its own documentation.  POD is designed so that a single file can carry documentation that is customized based on the target documentation form that is selected.  E.g., man pages and HTML can be produced from the same POD, and the POD can specify different content and formatting depending on the target.
.sh
Shell Script.
.tar
Tape Archive.  A sequential data stream format for archiving collections of files such that they can be transported as a unit to another system or restored on the original system
.tgz
short for .tar.gz, a file-name extension commonly used in the DOS and Windows world to indicate a compressed-tar archive.  Programs such as WinZip 7.0 recognize this file extension and do the right thing.
.txt
Text File.  There is often no suffix on text materials, and the nature of the content (e.g., a file named COPYING or MAKEFILE) might only be revealed by attempting to view the file as a known encoding of text.
.xs
?

Common Package Tool Requirements

unzip
a package for accessing and unpacking material in a .zip archive file
 

Primary Development Tools

talk about the desire for ability to know the implementation of everything that is used as part of a package, including beneath a package, all the way down to the hardware.   [Why doesn't GNU run on open-source hardware?]

CVS
Concurrent Versions System.  Part of the open-source toolcraft, CVS is used for collaborative software configuration management on the Internet.  Developers favor CVS for making current work available and also for bringing together and managing configurations using configurations developed at different locations around the world.
GNOME
The GNU Network Object Model Environment Project.
GTK
Graphic Tool Kit.
Linux
?
MySQL
My SQL Database?
Perl
Perl?  See http://www.perl.com/.
PHP
? An HTML-embedded scripting language that provides access to databases on Web servers, using standard ODBC.  See http://www.php.net/
Python
Python?
Tcl
?

Target Platforms

What is done in a tool to customize for a given platform, and what are some of the standard elements about that, including #DEFINE entries, etc.

created 1999-11-09 06:03 -0800 (pst) by orcmid
$$Author: Orcmid $
$$Date: 02-09-03 19:48 $
$$Revision: 2 $

Home