<div dir="auto">There was no concurrency in mini-Unix; the first pipeline component ran to completion, and when it exited the next component ran, and so on.  In this way a pipeline could be arbitrarily long using just two disk files.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Dec 5, 2024, 12:07 PM Marc Rochkind <<a href="mailto:mrochkind@gmail.com">mrochkind@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I don't think files as pipes would be "transparent to the user." Reading an empty pipe causes a wait until the bytes requested are available, unless the pipe is closed first. Reading to the end of a file results in an end-of-file error. This problem is avoided if the source process completes before the target process begins, but then there is a different lack of transparency, which is that the processes don't run simultaneously. (I think this is the case with the implementation that Heinz showed.)<div><br></div><div>Still, the same sort of pseudo-pipes were in MS-DOS, and they were occasionally useful.<br><div><br></div><div>Marc</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Dec 5, 2024 at 9:17 AM Heinz Lycklama <<a href="mailto:heinz@osta.com" target="_blank" rel="noreferrer">heinz@osta.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div>
    John, thanks for the reminder of the implementation<br>
    of pipes on a constrained version of UNIX in the early<br>
    days. The exact implementation is described on page 2095<br>
    of the BSTJ July-Aug 1978 for interested parties.<br>
    <br>
    <img src="cid:ii_19397c287d52aa7ca5d1" alt="" width="700" height="196"><br>
    <br>
    Heinz<br>
    <br>
    <div>On 12/5/2024 8:00 AM, John R Levine
      wrote:<br>
    </div>
    <blockquote type="cite">On Thu,
      5 Dec 2024, Dan Cross wrote:
      <br>
      <blockquote type="cite">
        <blockquote type="cite">Pipes were invented at least three times
          I'm aware of, but what made them
          <br>
          work so well in Unix is that they looked to the program the
          same as a file
          <br>
          so any program could use them for input or output without
          special arrangements,
          <br>
          and the shell made it easy to start two programs and pipe them
          together.
          <br>
        </blockquote>
        <br>
        Once you have coroutines and queues for passing data between
        them, a
        <br>
        lot of things start to look like pipes.
        <br>
      </blockquote>
      <br>
      They also can look a lot like temporary files.  Someone, probably
      Heinz, did a shell for the tiny Unix that ran on floppies so this
      <br>
      <br>
       foo | bar
      <br>
      <br>
      actually did this
      <br>
      <br>
       foo > tmpfile ; bar < tmpfile; rm tmpfile
      <br>
      <br>
      to avoid having to swap programs in and out on floppies.  The main
      disadvantage was that the tmpfile could overflow the tiny disks of
      the time.
      <br>
      <br>
      <blockquote type="cite">
        <blockquote type="cite">They were invented again at IBM in the
          1970s and described in this paper.  I wrote
          <br>
          them a letter, which they published, saying that Unix pipes
          did the same thing.
          <br>
          <br>
          <a href="https://dl.acm.org/doi/10.1147/sj.174.0383" target="_blank" rel="noreferrer">https://dl.acm.org/doi/10.1147/sj.174.0383</a>
          <br>
        </blockquote>
        <br>
        Don't forget CMS pipelines, too!
        <br>
        <br>
        Sadly, the Morrison paper cited above is not easily accessible,
        though
        <br>
      </blockquote>
      <br>
      If anyone else needs a copy, just ask.
      <br>
      <br>
      Regards,
      <br>
      John Levine, <a href="mailto:johnl@taugh.com" target="_blank" rel="noreferrer">johnl@taugh.com</a>, Taughannock Networks, Trumansburg NY
      <br>
      Please consider the environment before reading this e-mail.
      <a href="https://jl.ly" target="_blank" rel="noreferrer">https://jl.ly</a>
      <br>
    </blockquote>
    <br>
  </div>
</blockquote></div><div><br clear="all"></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><i>My new email address is <a href="mailto:mrochkind@gmail.com" target="_blank" rel="noreferrer">mrochkind@gmail.com</a></i></div></div></div>
</blockquote></div>