<?xml version="1.0"?>

<!DOCTYPE document [
<!ENTITY unix "U<sc>nix</sc>">
]>

<document>
  <meta>
    <title>Structured process input/output</title>
    <subtitle>Reformulating the &unix; command line environment to generate and process XML documents</subtitle>
    <student-name>Cameron McCormack</student-name>
    <student-id>12793086</student-id>
    <supervisor>Prof. John Hurst</supervisor>
  </meta>

  <sections>
    
    <section title="Introduction">
      <p>
        The &unix; operating system <cite ref="unix"/> is an interactive time-sharing
        system developed in 1969 while its authors were working for
        Bell Laboratories. It was created with the aim to of being an
        operating system for programmers.
      </p>
      <p>
        The purpose of an operating system is to manage a computer's resources.
        Among other tasks, an operating system schedules processes, manages memory
        and communicates with devices connected to the computer.  These services
        are all provided by the <em>kernel</em> of the operating system.  What
        set &unix; apart from other operating systems of the day was the selection
        of user programs included for manipulating data files.  These simple programs
        were all written to do a specific text processing task well.  The
        ability to compose these programs to create commands that perform
        more complex tasks is one of the features which has allowed &unix;-like
        operating systems to remain popular to this day.
      </p>
      <p>
        &unix; has its roots in the Multiplexed Information and Computing Service
        (Multics) project <cite ref="multics"/> initiated by MIT, Bell Labs and
        General Electric.  Multics was an ambitious project to develop a large
        scale, general purpose multi-user operating system.  The hope was to
        implement such features as a virtual memory system <cite ref="multics-vm"/>,
        dynamic linking <cite ref="multics-proc"/> and a true hierarchical file system
        <cite ref="multics-fs"/>.  In 1969, dissatisfied with the progress being
        made, Bell Labs withdrew from the project.
        Thompson and his team began to develop a new operating system from scratch.
        A year of development later, a primitive version of &unix; was up and running.
      </p>
      <p>
        Even since the early days of &unix;, little research has been done into
        reworking the command line and even less into the idea that leaving behind
        the flat text file paradigm would be prudent.  This is because keeping
        data stored in such a simple format has proven simple and powerful.
        Not all data fits neatly into the record/field organisation of the flat
        text file, however.  It is for this reason that a more structured format for
        data files and process input and output, such as the Extensible Markup
        Language (XML) <cite ref="xml"/>, needs to be investigated.
      </p>
      <p>
        In this report the development of important features of the &unix; family of operating systems,
        in particular its command line environment, are discussed.
      </p>
    </section>

    <section>
      <title>The &unix; command line environment</title>
      <p>
        The command line environment of &unix; has four main aspects: user programs,
        input/output redirection, command pipelines and the shell.  Together, these provide
        the user with a powerful means of composing and executing commands to
        manipulate data files.
      </p>
      <subsection title="User programs">
        <p>
          The selection of programs available for the user to run is at the heart of the
          command line environment.  From the outset, the focus of user programs was on
          file manipulation.  The first user programs to be written for &unix; were
          simple file system commands.  After having just implemented the file system,
          Thompson (1979) wrote a few small programs to manage it &#x2014; programs to
          let the user create, copy, edit, list and delete files.  These commands alone
          gave the user a simplistic electronic word processor, but not much more.
          As more user programs were added to the system, three general categories of
          program emerged: commands which performed a task with no output (such as
          copying or deleting a file), those which produced output (such as the
          directory listing program) and those which transformed output (filters, like the program
          to sort a file's contents).
        </p>
        <p>
          The user programs that were developed for &unix; were all small programs that
          performed a task, and only that task, well.  Kernighan and Plauger (1976) expounded
          on that idea and coined the term <em>software tool</em>.  By writing programs
          to deal with generalities rather than specifics, focussing them on performing
          a single task well, the user can build up a toolkit from which they can assemble
          commands to perform complex tasks.
        </p>
        <p>
          These programs were all written with a certain data format in mind, namely,
          flat text.  It was held that, to maximise portability and usefulness, data
          should be stored in plain ASCII (the American Standard Code for Information
          Interchange &#x2014; a 7-bit code definining a set of alphabetic, numeric,
          punctuation and control characters), arranged into fields separated by horizontal
          whitespace and records separated by newline characters <cite ref="phil"/>.
        </p>
        <p>
          While certainly an appropriate design decision for the early 1970s, this
          file format is not always the best today.  ASCII is able to represent only
          a handful of Western, Latin-based languages.  There was not much cause
          for writing with internationalisation and localisation in mind when
          the standard &unix; user programs were being created.  Today, with global
          networks such as the Internet, languages other than English have to be
          considered.  A character set such as Unicode <cite ref="unicode"/> or
          the Universal Character Set (UCS) <cite ref="iso10646"/> would certainly
          solve this problem if they were routinely used and had support from the
          operating system and its user programs.
        </p>
        <p>
          The rigid record/field format of flat text files also does not
          accommodate all types of data.  A particular example would be information
          arranged hierarchically.  Naturally such information could be stored
          in flat text, however an inelegant kludge such as recording a node's
          depth in the tree would have to be stored in its own field.  Far better
          to keep the relationships between the hierarchical data evident due
          to the file format itself.  A data file format such as XML could
          quite easily be used to store such data, being intrinsically hierarchical.
          XML also has the advantage of using named fields.  A user reading
          an XML document could easily determine the use of certain fields by their names,
          whereas in a flat text file, such names are absent, and the user would
          have to rely on some external documentation.  To be maximally useful
          all text generating programs would  have to write their output in XML
          so they could be used in conjunction with XML filtering programs.
        </p>
      </subsection>
      <subsection title="Input/output redirection">
        <p>
          One idea which increases the usefulness of the user programs in &unix;
          is that of input/output (I/O) redirection.  General redirection of process
          input and output was already available in Multics <cite ref="multics"/>
          and it was from here that the idea was borrowed.  One of the tenets
          of &unix; philsophy that Gancarz (1995) mentions is that all programs
          should be written as filters.  Processes under &unix; have the notion
          of a <em>standard input</em> and <em>standard output</em>.  If a program
          has not been given a filename on the command line, the standard
          input is where a program typically reads its input from.  The standard output,
          analogously, is where a program would write its output to.  Any program
          that reads data from the standard input, transforms it somehow, then writes
          that data out to the standard output, is considered to be a filter.
        </p>
        <p>
          Normally, both the standard input and output of a process is the terminal.
          Thus, program input comes from the keyboard and program output is written
          to the screen.  In &unix;, both the standard input and output of a process
          can be redirected to some other file or device.  With this, a program
          can be written to handle just a single input source (the standard input)
          and be able to handle any file implicitly, by having its input redirected
          before the program is run; similarly for a program's output.  This redirection
          is performed by the <em>shell</em>, the command interpreter that elicits
          commands to run from the user.  Programs which did not use the standard input and
          output, and instead relied on hard coded filenames, were definitely of limited
          use.
        </p>
        <p>
          While Multics could also handle such redirection, the method used for enacting
          the redirection in &unix; was far more elegant.  According to Ritchie (1979),
          Multics required the user to use an explicit command to reassign a program's
          output.  For example, to run the <code>list</code> command and redirect its
          output to a file called <code>listing</code>, the following three commands were issued:
        </p>
        <listing>
          <code>iocall attach user_output file listing</code>
          <code>list</code>
          <code>iocall attach user_output syn user_i/o</code>
        </listing>
        <p>
          To accomplish the same task in &unix;, running the <code>ls</code> program
          to generate the listing, just a single command was needed:
        </p>
        <listing>
          <code>ls > listing</code>
        </listing>
        <p>
          Input redirection could be achieved with a similarly simple command:
        </p>
        <listing>
          <code>ed &lt; cmds</code>
        </listing>
        <p>
          This command runs the <code>ed</code> editor, taking commands from the file
          <code>cmds</code>.  The syntax of I/O redirection, using '&lt;' and '>',
          has not changed since its original inclusion in &unix; in 1970.
        </p>
      </subsection>
      <subsection title="Command pipelines">
        <p>
          The mechanism for composing commands is the <em>command pipeline</em>.  The concept,
          which was first seen in the &unix; operating system, is attributed to McIlroy <cite ref="evolution"/>.
          In 1972 McIlroy proposed the concept of connecting a series of processes together such
          that the output of one process became the input of the next, the analogy used being
          that connecting these processes was like screwing together garden hoses.
          The command pipeline is what enables the reuse of the software tools available to
          the &unix; user to create complex commands in a single line.
        </p>
        <p>
          The original syntax used for the pipe concept was similar to the I/O redirection
          syntax that already existed.  A pipeline to sort a file and take the first 10 lines
          to send to the printer could be written as:
        </p>
        <listing>
          <code>sort file >head>lpr</code>
        </listing>
        <p>
          Thus, either a file or a command could be placed after a '>' character to indicate
          where the output of the previous command inthe pipeline was to go.  This syntax,
          while consistent with the redirection syntax, did allow ambiguous commands to
          be written.  For example, with this syntax there was no way to specify that you
          wished the output of the <code>sort</code> command to be written to a file called <code>head</code>,
          as the shell would determine that <code>head</code> was a program and that <code>sort</code>'s
          output should be sent there instead.  The syntax was therefore changed to use
          the vertical bar (or the <em>pipe symbol</em> as it has become known).
          The above command now could be written as:
        </p>
        <listing>
          <code>sort file | head | lpr</code>
        </listing>
        <p>
          It was at this time, after having implemented the pipeline concept, that the developers
          of &unix; came to the realisation that this simple extension of I/O redirection was the
          vehicle for program reuse <cite ref="tools"/>.
        </p>
        <p>
          When considering the reformulation of the &unix; command line environment to use
          XML documents, the pipeline concept can remain unchanged.  Processes will still write
          their output to the input of another, only now that output will be in the XML
          format.
        </p>
      </subsection>
      <subsection title="The shell">
        <p>
          The program that provides an interface to the command line environment is the shell.
          It is this program that repeatedly prompts the user for a command and then executes
          that command.  The shell is perhaps the one aspect of the &unix; command line
          environment that has undergone a number of changes since its inception.
        </p>
        <p>
          The original &unix; shell created at the start of 1970 was very simplistic <cite ref="evolution"/>.
          All the shell did was read a single command from the terminal, load the
          specified program over the top of itself, and jump to that new program.  The
          operating system relied on the user program to invoke the <em>exit</em> system call,
          which would load a fresh copy of the shell into memory and begin its execution.
          This was not a true multiprogrammed system, though.  Only one process could run
          at one time.
        </p>
        <p>
          Subsequent developments to the operating system included the <em>fork</em>/<em>exec</em>
          process control that still exists in todays' &unix;es.  The Berkeley time-sharing system
          developed in 1969 already incorporated this method of process control.  With this,
          the &unix; shell could now handle background processes easily.  Background processes
          are those started with a command such as:
        </p>
        <listing>
          <code>program &amp;</code>
        </listing>
        <p>
          The ampersand indicates that the shell should execute the program in the background
          and immediately ask the user for another command to run.
        </p>
        <p>
          From the release of &unix; First Edition in 1971 until the Sixth Edition in 1976, very
          little changed in the operation of the shell.  However, during the development of
          the Seventh Edition, Bourne (1983) created his own shell, to be known as the Bourne shell.
          The Bourne shell brought to &unix; shell programming constructs such as iteration
          and selection that allowed the user to
          write complex shell scripts.  From that point onward, most new shells developed for &unix;,
          such as the Kornshell <cite ref="korn"/> and the Z shell <cite ref="zsh"/>, maintained a 
          syntax compatible with the Bourne shell.  One popular shell that was significantly different
          from the Bourne shell was the C shell, csh, written by Bill Joy for inclusion into
          the Berkeley Systems Distribution of &unix; <cite ref="bsd"/>.  The C shell, as its
          name implies, lets the user run commands with a syntax reminiscent of the C programming
          language <cite ref="c"/>.
        </p>
        <p>
          Attempts to vastly redesign the &unix; shell have been made.  One notable design is that
          of a functional shell, where commands are entered in a form similar to those used
          in a functional programming language.  These shells, such as McDonald's (1987) fsh
          and the Scheme shell <cite ref="scsh"/>, scsh, allow the user to compose commands as
          if they were functions.
        </p>
        <p>
          All of these shells, however, have still been designed with the assumption that the
          majority of user programs that are to be composed use flat text for their input and 
          output.  The shells can let program output be written verbatim to the terminal, since
          flat text is eminently human readable.  If, however, user programs are to be
          designed to read and write XML documents, program output is not immediately
          appropriate for the user to read.  XML documents are readable by humans &#x2014; they
          do not contain any illegible control codes as some binary formats do &#x2014; but
          the information in these documents should be converted into a form that
          is easy for the user to read.  Since the user will be interacting with the shell
          using a text based terminal, program output destined for the terminal should be
          transformed into plain text by the shell.  Making this final transformation for
          the user the responsibility of the shell means that user programs do not have
          to worry about checking whether their output is to be piped into another program,
          redirected into a file or written to the terminal.
        </p>
      </subsection>
    </section>
    
    <section title="Conclusion">
      <p>
        None of the &unix; systems developed over the last 30 years have moved away from the
        flat text file format that the &unix; command line holds to firmly.  Gancarz (1995)
        notes that data files should contain only streams of bytes separated by newline
        characters.  Authors of &unix; systems have thus far adhered to this.
      </p>
      <p>
        The reason for the success of the flat text file format is its simplicity.  It is
        indeed an easy to use, useful format in which to store data.  Thirty years,
        however, is a very long time in the world of computers, and requirements for
        data storage have changed.  The old adage "if it ain't broke, don't fix it"
        aside, the requirements for general program input and output format is yet
        an open area of research.
      </p>
    </section>

    <bibliography>
      <book id="c">
        <authors>
          <author>
            <surname>Kernighan</surname>
            <initials>B.W.</initials>
          </author>
          <author>
            <surname>Ritchie</surname>
            <initials>D.M.</initials>
          </author>
        </authors>
        <year>1978</year>
        <title>The C Programming Language</title>
        <publisher>Prentice Hall</publisher>
      </book>
      
      <book id="korn">
        <authors>
          <author>
            <surname>Bolsky</surname>
            <initials>M.I.</initials>
          </author>
          <author>
            <surname>Korn</surname>
            <initials>D.G.</initials>
          </author>
        </authors>
        <year>1995</year>
        <title>The new Kornshell, 2nd ed.</title>
        <publisher>Prentice Hall</publisher>
        <place>Englewood Cliffs</place>
      </book>
      
      <book id="bourne">
        <authors>
          <author>
            <surname>Bourne</surname>
            <initials>S.R.</initials>
          </author>
        </authors>
        <year>1983</year>
        <title>The &unix; system</title>
        <publisher>Addison-Wesley</publisher>
        <place>Reading, Mass</place>
      </book>
      
      <standard id="iso10646">
        <organisation>International Organization for Standardization</organisation>
        <year>2000</year>
        <title>Information technology &#x2014; Universal Multiple-Octet Coded Character Set (UCS) &#x2014; Part 1: Architecture and Basic Multilingual Plane</title>
        <number>ISO 10646-1:2000</number>
        <place>Geneva</place>
      </standard>

      <book id="unicode">
        <authors>
          <author>
            <surname>The Unicode Consortium</surname>
          </author>
        </authors>
        <year>2000</year>
        <title>The Unicode standard, version 3.0</title>
        <publisher>Addison-Wesley</publisher>
        <place>Reading, Mass</place>
      </book>
      
      <book id="phil">
        <authors>
          <author>
            <surname>Gancarz</surname>
            <initials>M.</initials>
          </author>
        </authors>
        <year>1995</year>
        <title>The &unix; Philosophy</title>
        <publisher>Digital Press</publisher>
        <place>Boston</place>
      </book>
      
      <book-section id="bsd">
        <authors>
          <author>
            <surname>McKusick</surname>
            <initials>K.</initials>
          </author>
        </authors>
        <year>1999</year>
        <section-title>Chapter 2 &#x2014; Twenty Years of Berkeley Unix: From AT&amp;T-Owned to Freely Redistributable</section-title>
        <title>Open Sources: Voices from the Open Source Revolution</title>
        <pages>
          <first>31</first>
          <last>46</last>
        </pages>
        <editors>
          <editor>
            <surname>DiBona</surname>
            <initials>C.</initials>
          </editor>
          <editor>
            <surname>Ockman</surname>
            <initials>S.</initials>
          </editor>
          <editor>
            <surname>Stone</surname>
            <initials>M.</initials>
          </editor>
        </editors>
        <publisher>O'Reilly &amp; Associates</publisher>
        <place>Sebastapol, California</place>
      </book-section>
      
      <web id="zsh">
        <year>2001</year>
        <date>2001, Oct. 24</date>
        <title>The Z Shell Manual</title>
        <site-title>ZSH - THE Z SHELL</site-title>
        <url>http://zsh.sunsite.dk/Doc/zsh_a4.ps.gz</url>
        <authors>
          <author>
            <surname>Falstad</surname>
            <initials>P.</initials>
          </author>
        </authors>
        <accessed-date>30 July 2002</accessed-date>
      </web>
      
      <web id="scsh">
        <year>2002</year>
        <date>2002, May</date>
        <title>Scsh Reference Manual</title>
        <site-title>Scsh - The Scheme Shell</site-title>
        <url>ftp://ftp.scsh.net/pub/scsh/0.6/scsh-manual.ps.gz</url>
        <authors>
          <author>
            <surname>Shivers</surname>
            <initials>O.</initials>
          </author>
          <author>
            <surname>Carlstrom</surname>
            <initials>B.D.</initials>
          </author>
          <author>
            <surname>Gasbichler</surname>
            <initials>M.</initials>
          </author>
          <author>
            <surname>Sperber</surname>
            <initials>M.</initials>
          </author>
        </authors>
        <accessed-date>30 July 2002</accessed-date>
      </web>
      
      <!--web id="xslt">
        <year>1999</year>
        <date>1999, Nov. 16</date>
        <title>XSL Transformations (XSLT)</title>
        <site-title>The World Wide Web Consortium</site-title>
        <url>http://www.w3.org/TR/1999/REC-xslt-19991116</url>
        <authors>
          <author>
            <surname>Clark</surname>
            <initials>J.</initials>
          </author>
        </authors>
        <accessed-date>2 May 2002</accessed-date>
      </web>
      
      <web id="soap">
        <year>2000</year>
        <date>2000, May 8</date>
        <title>Simple Object Access Protocol (SOAP) 1.1</title>
        <site-title>The World Wide Web Consortium</site-title>
        <url>http://www.w3.org/TR/2000/NOTE-SOAP-20000508</url>
        <authors>
          <author>
            <surname>Box</surname>
            <initials>D.</initials>
          </author>
          <author>
            <surname>Ehnebuske</surname>
            <initials>D.</initials>
          </author>
          <author>
            <surname>Kakivaya</surname>
            <initials>G.</initials>
          </author>
          <author>
            <surname>Layman</surname>
            <initials>A.</initials>
          </author>
        </authors>
        <accessed-date>2 May 2002</accessed-date>
      </web-->
      
      <web id="xml">
        <year>2000</year>
        <date>2000, Oct. 6</date>
        <title>Extensible Markup Language (XML) 1.0 (Second Edition)</title>
        <site-title>The World Wide Web Consortium</site-title>
        <url>http://www.w3.org/TR/REC-xml</url>
        <authors>
          <author>
            <surname>Bray</surname>
            <initials>T.</initials>
          </author>
          <author>
            <surname>Sperberg-McQueen</surname>
            <initials>C.M.</initials>
          </author>
          <author>
            <surname>Paoli</surname>
            <initials>J.</initials>
          </author>
          <author>
            <surname>Maler</surname>
            <initials>E.</initials>
          </author>
        </authors>
        <accessed-date>30 July 2002</accessed-date>
      </web>
      
      <!--web id="xmlwd">
        <year>1996</year>
        <date>1996, Nov. 14</date>
        <title>Extensible Markup Language (XML)</title>
        <site-title>The World Wide Web Consortium</site-title>
        <url>http://www.w3.org/TR/WD-xml-961114.html</url>
        <authors>
          <author>
            <surname>Bray</surname>
            <initials>T.</initials>
          </author>
          <author>
            <surname>Sperberg-McQueen</surname>
            <initials>C.M.</initials>
          </author>
        </authors>
        <accessed-date>2 May 2002</accessed-date>
      </web>
      
      <web id="html">
        <year>1995</year>
        <date>1995, Nov.</date>
        <title>Hypertext Markup Language &#x2014; 2.0</title>
        <site-title>The Internet Engineering Taskforce</site-title>
        <authors>
          <author>
            <surname>Berners-Lee</surname>
            <initials>T.</initials>
          </author>
          <author>
            <surname>Connolly</surname>
            <initials>D.</initials>
          </author>
        </authors>
        <url>http://www.ietf.org/rfc/rfc1866.txt</url>
        <accessed-date>2 May 2002</accessed-date>
      </web>
      
      <standard id="sgmlstd">
        <organisation>International Organization for Standardization</organisation>
        <year>1986</year>
        <title>Information processing &#x2014; Text and office systems &#x2014; Standard Generalized Markup Language (SGML)</title>
        <number>ISO 8879:1986</number>
        <place>Geneva</place>
      </standard>

      <book id="env">
        <authors>
          <author>
            <surname>Kernighan</surname>
            <initials>B.W.</initials>
          </author>
          <author>
            <surname>Pike</surname>
            <initials>R.</initials>
          </author>
        </authors>
        <year>1984</year>
        <title>The &unix; Programming Environment</title>
        <publisher>Prentice Hall, Inc.</publisher>
        <place>Englewood Cliffs, New Jersey</place>
      </book-->
      
      <book id="tools">
        <authors>
          <author>
            <surname>Kernighan</surname>
            <initials>B.W.</initials>
          </author>
          <author>
            <surname>Plauger</surname>
            <initials>P.J.</initials>
          </author>
        </authors>
        <year>1976</year>
        <title>Software Tools</title>
        <publisher>Addison-Wesley</publisher>
        <place>Reading, Massachusetts</place>
      </book>
      
      <journal-article id="unix">
        <authors>
          <author>
            <surname>Ritchie</surname>
            <initials>D.M.</initials>
          </author>
          <author>
            <surname>Thompson</surname>
            <initials>K.</initials>
          </author>
        </authors>
        <year>1974</year>
        <article-title>The &unix; time-sharing system</article-title>
        <title>Communications of the ACM</title>
        <volume>17</volume>
        <issue>7</issue>
        <pages>
          <first>365</first>
          <last>375</last>
        </pages>
      </journal-article>
      
      <journal-article id="fsh">
        <authors>
          <author>
            <surname>McDonald</surname>
            <initials>C.S.</initials>
          </author>
        </authors>
        <year>1987</year>
        <article-title>fsh &#x2014; A Functional &unix; Command Interpreter</article-title>
        <title>Software &#x2014; Practice and Experience</title>
        <volume>17</volume>
        <issue>10</issue>
        <pages>
          <first>687</first>
          <last>700</last>
        </pages>
      </journal-article>

      <journal-article id="multics">
        <authors>
          <author>
            <surname>Corbat&#xf3;</surname>
            <initials>F.J.</initials>
          </author>
          <author>
            <surname>Vyssotsky</surname>
            <initials>V.A.</initials>
          </author>
        </authors>
        <year>1965</year>
        <article-title>Introduction and Overview of the Multics System</article-title>
        <title>Proceedings of the AFIPS Fall Join Computer Conference</title>
        <volume>27</volume>
        <issue>1</issue>
        <pages>
          <first>185</first>
          <last>196</last>
        </pages>
      </journal-article>

      <journal-article id="multics-vm">
        <authors>
          <author>
            <surname>Bensoussan</surname>
            <initials>A.</initials>
          </author>
          <author>
            <surname>Clingen</surname>
            <initials>C.T.</initials>
          </author>
          <author>
            <surname>Daley</surname>
            <initials>R.C.</initials>
          </author>
        </authors>
        <year>1972</year>
        <article-title>The Multics Virtual Memory: Concepts and Design</article-title>
        <title>Communications of the ACM</title>
        <volume>15</volume>
        <issue>5</issue>
        <pages>
          <first>308</first>
          <last>318</last>
        </pages>
      </journal-article>
      
      <journal-article id="multics-proc">
        <authors>
          <author>
            <surname>Daley</surname>
            <initials>R.C.</initials>
          </author>
          <author>
            <surname>Dennis</surname>
            <initials>J.B.</initials>
          </author>
        </authors>
        <year>1968</year>
        <article-title>Virtual memory, processes, and sharing in Multics</article-title>
        <title>Communications of the ACM</title>
        <volume>11</volume>
        <issue>5</issue>
        <pages>
          <first>306</first>
          <last>312</last>
        </pages>
      </journal-article>

      <journal-article id="multics-fs">
        <authors>
          <author>
            <surname>Daley</surname>
            <initials>R.C.</initials>
          </author>
          <author>
            <surname>Neumann</surname>
            <initials>P.G.</initials>
          </author>
        </authors>
        <year>1965</year>
        <article-title>A General Purpose File System for Secondary Storage</article-title>
        <title>Proceedings of AFIPS Fall Joint Computer Conference</title>
        <volume>27</volume>
        <issue>1</issue>
        <pages>
          <first>213</first>
          <last>229</last>
        </pages>
      </journal-article>
      
      <journal-article id="multicsio">
        <authors>
          <author>
            <surname>Feiertag</surname>
            <initials>R.J.</initials>
          </author>
          <author>
            <surname>Organick</surname>
            <initials>E.I.</initials>
          </author>
        </authors>
        <year>1971</year>
        <article-title>The Multics input-output system</article-title>
        <title>Proceedings of the Third Symposium on Operating Systems Principles</title>
        <pages>
          <first>35</first>
          <last>41</last>
        </pages>
      </journal-article>
      
      <conference-paper id="evolution">
        <authors>
          <author>
            <surname>Ritchie</surname>
            <initials>D.M.</initials>
          </author>
        </authors>
        <year>1979</year>
        <paper-title>The Evolution of the &unix; Time-sharing System</paper-title>
        <title>Language Design and Programming Methodology</title>
        <conference-place>Sydney, Australia</conference-place>
        <conference-date>September 1979</conference-date>
        <publisher>Springer-Verlag</publisher>
      </conference-paper>
      
      <!--conference-paper id="eq">
        <authors>
          <author>
            <surname>Hu</surname>
            <initials>J.</initials>
          </author>
          <author>
            <surname>Wu</surname>
            <initials>H.R.</initials>
          </author>
          <author>
            <surname>Jennings</surname>
            <initials>A.</initials>
          </author>
          <author>
            <surname>Wang</surname>
            <initials>X.</initials>
          </author>
        </authors>
        <year>2000</year>
        <paper-title>Fast and robust equalization: A case study</paper-title>
        <editors>
          <editor>
            <surname>Callaos</surname>
            <initials>XXX
          </editor>
        </editors>
      </conference-paper>

      <book id="ooperl">
        <authors>
          <author>
            <surname>Conway</surname>
            <initials>D.</initials>
          </author>
        </authors>
        <year>2000</year>
        <title>Object oriented perl - A comprehensive guide to concepts and programming techniques</title>
        <publisher>Manning Publications Co.</publisher>
        <place>Connecticut, USA</place>
      </book>

      <book-section id="causal">
        <authors>
          <author>
            <surname>Wallace</surname>
            <initials>C.S.</initials>
          </author>
          <author>
            <surname>Korb</surname>
            <initials>K.B.</initials>
          </author>
        </authors>
        <year>1999</year>
        <section-title>Learning linear causal models by MML sampling</section-title>
        <title>Causal models and intelligent data management</title>
        <editors>
          <editor>
            <surname>Gammerman</surname>
            <initials>A.</initials>
          </editor>
        </editors>
        <publisher>Springer-Verlag</publisher>
        <place>Berlin, New York</place>
        <pages>
          <first>89</first>
          <last>111</last>
        </pages>
      </book-section-->
      
    </bibliography>

  </sections>
</document>

