From owner-doc-jp@jp.freebsd.org  Sun Sep 19 21:45:54 1999
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id VAA47834;
	Sun, 19 Sep 1999 21:45:54 +0900 (JST)
	(envelope-from owner-doc-jp@jp.FreeBSD.org)
Received: from sv01.geocities.co.jp (sv01.geocities.co.jp [210.153.89.155])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id VAA47829
	for <doc-jp@jp.freebsd.org>; Sun, 19 Sep 1999 21:45:54 +0900 (JST)
	(envelope-from hrs@geocities.co.jp)
Received: from mail.geocities.co.jp (mail.geocities.co.jp [210.153.89.137]) by sv01.geocities.co.jp (8.9.3+3.2W/3.7W) with ESMTP id VAA04814 for <doc-jp@jp.freebsd.org>; Sun, 19 Sep 1999 21:45:53 +0900 (JST)
Received: from mail.hrs.jp (sutnmax2-ppp00.ed.noda.sut.ac.jp [133.31.173.70]) by mail.geocities.co.jp (1.3G-GeocitiesJ-3.3) with ESMTP id VAA09137 for <doc-jp@jp.freebsd.org>; Sun, 19 Sep 1999 21:45:49 +0900 (JST)
Message-Id: <199909191245.VAA09137@mail.geocities.co.jp>
Received: from localhost (alph.hrs.jp [192.168.0.10])
	by mail.hrs.jp (8.9.3/3.7W/DomainMaster) with ESMTP id VAA83268
	for <doc-jp@jp.freebsd.org>; Sun, 19 Sep 1999 21:44:30 +0900 (JST)
	(envelope-from hrs@hrs.jp)
To: doc-jp@jp.freebsd.org
In-Reply-To: <14298.20777.230312.99152P@localhost.sky.rim.or.jp>
References: <14298.20777.230312.99152P@localhost.sky.rim.or.jp>
X-Mailer: Mew version 1.94 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Sun_Sep_19_21:39:56_1999_518)--"
Content-Transfer-Encoding: 7bit
Date: Sun, 19 Sep 1999 21:42:45 +0900
From: Hiroki Sato <hrs@geocities.co.jp>
X-Dispatcher: imput version 990905(IM130)
Lines: 384
Reply-To: doc-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: doc-jp 6695
Subject: [doc-jp 6695] Re: <handbook> linuxemu/chapter.sgml (1.12)
Errors-To: owner-doc-jp@jp.freebsd.org
Sender: owner-doc-jp@jp.freebsd.org
X-Originator: hrs@geocities.co.jp

----Next_Part(Sun_Sep_19_21:39:56_1999_518)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

$B:4F#!wEl5~M}2JBg3X$G$9!#(B

 # $BFq$7$+$C$?$N$G<+?.$,$"$j$^$;$s!#(B

+      calls).  In addition, the process is flagged for special handling of the
+      trap vector for the signal trampoline code, and sever other (minor)
+      fixups that are handled by the Linux kernel module.</para>

 other minor fixups $B$r$I$&Lu$;$PNI$$$N$+$o$+$i$J$$$N$G$9$,(B,
 $BNI$$%"%$%G%"$O$"$j$^$;$s$+(B?

($B$3$3$+$i(B)

+  <sect1>
+    <title>How does the emulation work?</title>

    <title>$B%(%_%e%l!<%7%g%s$O$I$N$h$&$J86M}$G9T$J$C$F$$$k$N$G$9$+(B?</title>
+
+    <para>This section is based heavily on an e-mail written to the
+      <email>chat@FreeBSD.org</email> mailing list, written by Terry Lambert
+      <email>tlambert@primenet.com</email> (Message ID:
+      <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>).</para>
+
+    <para>FreeBSD has an abstraction called an &ldquo;execution class
+      loader&rdquo;.  This is a wedge into the &man.execve.2; system
+      call.</para>

    <para>$B$3$N%;%/%7%g%s$O(B, $B$[$H$s$I$,(B <email>chat@FreeBSD.org</email>
      $B%a!<%j%s%0%j%9%H$KEj9F$5$l$?(B
      Terry Lambert<email>tlambert@primenet.com</email> $B;a$N%a!<%k(B(Message ID:
      <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>)
     $B$K4p$E$$$F$$$^$9(B.
    </para>

    <para>FreeBSD $B$O(B, &ldquo;$B<B9T%/%i%9%m!<%@(B(execution class loader)&rdquo;
      $B$H8F$P$l$kCj>]E*$J5!9=$r;}$C$F$$$^$9(B. $B$3$l$O(B &man.execve.2
      $B%7%9%F%`%3!<%k$KDI2C$5$l$k7A$G<BAu$5$l$F$$$^$9(B.
    </para>

+    <para>What happens is that FreeBSD has a list of loaders, instead of a
+      single loader with a failback to the <literal>#!</literal> loader for
+      running any shell interpreters or shell scripts.</para>
+    <para>Historically, the only loader on the UNIX platform examined the
+      magic number (generally the first 4 or 8 bytes of the file) to see if it
+      was a binary known to the system, and if so, invoked the binary
+      loader.</para>
+    <para>If it was not the binary type for the system, the &man.execve.2;
+      call returned a failure, and the shell attempted to start executing it
+      as shell commands.</para>

    <para>FreeBSD $B$O(B, $B%7%'%k%$%s%?%W%j%?$d%7%'%k%9%/%j%W%H$r<B9T$9$k$?$a$N(B
      <literal>#!</literal> $B%m!<%@$r;}$C$?C10l$N%W%m%0%i%`%m!<%@$G$O$J$/(B,
      $B%W%m%0%i%`%m!<%@$N%j%9%H$rHw$($F$$$^$9(B.
    </para>

    <para>$BNr;KE*$K8@$C$F(B, UNIX $B%W%i%C%H%U%)!<%`$G%^%8%C%/%J%s%P(B($B0lHLE*$K%U%!%$%k@hF,$N(B
      4 $B$J$$$7(B 8 $B%P%$%HItJ,(B)$B$N8!::$r9T$J$&$N$O%W%m%0%i%`%m!<%@$@$1$G$9(B.
      $B%W%m%0%i%`%m!<%@$O(B, $B$=$l$,%7%9%F%`$G<B9T$G$-$k%P%$%J%j$J$N$+3NG'$7$F(B,
      $B$=$l$,3NG'$G$-$l$P%P%$%J%j%m!<%@$r8F$S=P$7$^$9(B. 
    </para>

    <para>$B$b$7(B, $B$=$l$,$=$N%7%9%F%`MQ$N%P%$%J%j$G$J$$>l9g$K$O(B,
      &man.execve.2; $B%7%9%F%`%3!<%k$N8F$S=P$7$O<:GT$NLa$jCM$rJV$7(B,
      $B%7%'%k$,%7%'%k%3%^%s%I$H$7$F<B9T$7$h$&$H;n$_$k$o$1$G$9(B.
    </para>

+    <para>The assumption was a default of &ldquo;whatever the current shell
+      is&rdquo;.</para>
+    
+    <para>Later, a hack was made for &man.sh.1; to examine the first two
+      characters, and if they were <literal>:\n</literal>, then it invoked the
+      &man.csh.1; shell instead (I believe SCO first made this hack, but am
+      willing to be corrected).</para>

    <para>$B$3$N2>Dj$O(B, &ldquo;$B8=:_MxMQ$7$F$$$k%7%'%k$,$I$N$h$&$J$b$N$G$"$C$F$b(B&rdquo;$BJQ$o$j$^$;$s(B.
        </para>
    
    <para>$B8e$K$J$C$F(B, &man.sh.1; $B$KJQ99$,2C$($i$l$^$7$?(B.
        $B$=$l$O@hF,$N(B 2 $B%P%$%H$r8!::$7(B, <literal>:\n</literal> $B$@$C$?$i(B
        $B%7%'%k$H$7$FBe$o$j$K(B &man.csh.1; $B$r8F$S=P$9(B, $B$H$$$&$b$N$G$9(B($B$3$NJQ99$O(B
        SCO $B$,:G=i$K9T$J$C$?$H5-21$7$F$$$k$N$G$9$,(B,
        $B4V0c$$$G$"$C$?$i;XE&$7$F2<$5$$(B).
    </para>

+    <para>What FreeBSD does now is go through a list of loaders, with a
+      generic <literal>#!</literal> loader that knows about interpreters as
+      the characters which follow to the next whitespace next to last,
+      followed by a fallback to <filename>/bin/sh</filename>.</para>
+                       
+    <para>For the Linux binary emulation, FreeBSD sees the magic number as an
+      ELF binary (it makes no distinction between FreeBSD, Solaris, Linux, or
+      any other OS which has an ELF image tpye, at this point).</para>

    <para>FreeBSD $B$O$=$N:](B, $B%W%m%0%i%`%m!<%@%j%9%H$rAv::$7$^$9(B.
      $B$=$l$K$O(B, $B6uGrJ8;z$^$G$NJ8;zNs$r%$%s%?%W%j%?$H$7$FG'<1$9$k(B,
      $BDL>o$N(B <literal>#!</literal> $B%m!<%@$rMQ$$$^$9(B.
      $B$7$?$,$C$F(B, $B3:Ev$9$k$b$N$,B8:_$7$J$1$l$P:G=*E*$K(B /bin/sh
      $B$,%m!<%I$5$l$k$3$H$K$J$j$^$9(B.
    </para>

    <para>
      Linux $B%P%$%J%j%(%_%e%l!<%7%g%s$r9T$J$&$?$a(B, FreeBSD $B$O(B
      ELF $B%P%$%J%j$r<($9%^%8%C%/%J%s%P$r3NG'$7$^$9(B.
      ($B$?$@$7(B, $B$3$l$+$i(B FreeBSD, Solaris, Linux, $B$=$7$F$=$NB>$K$bB8:_$9$k(B
       ELF $B%$%a!<%87A<0$r;H$C$F$$$k(B OS $B$r6hJL$9$k$3$H$O$G$-$^$;$s(B).
    </para>

+    <para>The ELF loader looks for a specialized <emphasis>brand</emphasis>,
+      which is a comment section in the ELF image, and which is not present on
+      SVR4/Solaris ELF binaries.</para>
+                       
+    <para>For Linux binaries to function, they must be
+      <emphasis>branded</emphasis> as type <literal>Linux</literal>; from
+      &man.brandelf.1;:</para>

    <para>ELF $B%m!<%@$O(B, $BFC<l$J(B<emphasis>$B%^!<%/(B(brand)</emphasis>$B$,$"$k$+$I$&$+C5$7$^$9(B.
        $B$3$N%^!<%/$H$O(B, ELF $B%$%a!<%8$N%3%a%s%H%;%/%7%g%s$N$3$H$G$9(B.
        SVR4/Solaris $B$N(B ELF $B%P%$%J%j$K$O!"$3$N%;%/%7%g%s$OB8:_$7$^$;$s(B.
    </para>
                       
    <para>
      Linux $B%P%$%J%j$r<B9T$9$k$?$a$K$O(B,
      ELF $B%P%$%J%j$K(B &man.brandelf.1; $B$G@bL@$5$l$F$$$k(B
      <literal>Linux</literal>$B$N%^!<%/$,(B
      <emphasis>$BIU$1$i$l$F(B</emphasis>$B$$$J$1$l$P$J$j$^$;$s(B.
     </para>
                       
+    <screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
+                       
+    <para>When this is done, the ELF loader will see the
+      <literal>Linux</literal> brand on the file.</para>

    <para>$B>e$N$h$&$K$9$k$3$H$G(B, $B;XDj$5$l$?%U%!%$%k$O(B
        <literal>Linux</literal> $B$N%^!<%/$,IU$1$i$l(B,
        ELF $B%m!<%@$,G'<1$G$-$k$h$&$K$J$j$^$9(B.
    </para>

+    <para>When the ELF loader sees the <literal>Linux</literal> brand, the
+      loader replaces a pointer in the <literallayout> proc</literallayout>
+      structure.  All system calls are indexed through this pointer (in a
+      traditional UNIX system, this would be the <literallayout>
+	sysent[]</literallayout> structure array, containing the system
+      calls).  In addition, the process is flagged for special handling of the
+      trap vector for the signal trampoline code, and sever other (minor)
+      fixups that are handled by the Linux kernel module.</para>

    <para>
      ELF $B%m!<%@$,(B <literal>Linux</literal> $B%^!<%/$r3NG'$9$k$H(B,
      $B%m!<%@$O(B <literallayout>proc</literallayout> $B9=B$BNFb$N(B
      $B$"$k0l$D$N%]%$%s%?$rCV$-49$($^$9(B. $B%7%9%F%`%3!<%k$OA4$F(B,
      $B$3$NCV$-49$($i$l$?%]%$%s%?(B($BEAE}E*$J(B UNIX $B%7%9%F%`$G$O(B,
      $B%7%9%F%`%3!<%k$,(B <literallayout>sysent[]</literallayout>
      $B9=B$BN$NG[Ns$H$7$F<BAu$5$l$F$$$^$9(B)$B$r4p=`$K8F$S=P$5$l$^$9(B.
      $B$^$?$=$N%W%m%;%9$O(B, $B%7%0%J%k%H%i%s%]%j%s%3!<%I(B($BLuCm(B:
      $B%7%0%J%k$NEAGE$r<B8=$9$k%3!<%I(B)$B$d(B,
      Linux $B%+!<%M%k%b%8%e!<%k$K$h$C$FA`:n$5$l$k(B
      $BB>$N(B($B:Y$+$J(B)$B5!9=$r@Z$jN%$9$?$a$K(B,
      $BFC<l$JJ}K!$G%H%i%C%W%Y%/%?$rA`:n$9$k$?$a$N%U%i%0$,%;%C%H$5$l$^$9(B.
    </para>

+    <para>The Linux system call vector contains, among other things, a list of
+      <literal>sysent[]</literal> entries whose addresses reside in the kernel
+      module.</para>
+
+    <para>When a system call is called by the Linux binary, the trap code
+      dereferences the system call function pointer off the
+      <literal>proc</literal> structure, and gets the Linux, not the FreeBSD,
+      system call entry points.</para>

    <para>
      Linux $B%7%9%F%`%3!<%k%Y%/%?$O(B, $B$5$^$6$^$J%G!<%?$K2C$($F(B
      $B%+!<%M%k%b%8%e!<%kFb$N%"%I%l%9$r;X$9(B <literal>sysent[]</literal>
      $B%(%s%H%j$N%j%9%H$r4^$s$G$$$^$9(B.
    </para>

    <para>
      Linux $B%P%$%J%j$,%7%9%F%`%3!<%k$rH/9T$9$k:](B, $B%H%i%C%W%3!<%I$O(B
      $B%7%9%F%`%3!<%k4X?t%]%$%s%?$r(B <literal>proc</literal> $B9=B$BN$KB($7$F(B
      $B2r<a$7$^$9(B. $B$=$7$F(B, FreeBSD $B$G$O$J$/(B Linux $BMQ$N(B
      $B%7%9%F%`%3!<%k%(%s%H%j%]%$%s%H$rF@$k$o$1$G$9(B.
     </para>

+    <para>In addition, the Linux emulation dynamically
+      <emphasis>reroots</emphasis> lookups; this is, in effect, what the
+      <literal>union</literal> option to FS mounts ( <emphasis>not</emphasis>
+      the unionfs!) does.  First, an attempt is made to lookup the file in the
+      <filename>/compat/linux/<replaceable>original-path</replaceable></filename>
+      directory, <emphasis>then</emphasis> only if that fails, the lookup is
+      done in the
+      <filename>/<replaceable>original-path</replaceable></filename>
+      directory.  This makes sure that binaries that require other binaries
+      can run (e.g., the Linux toolchain can all run under emulation).  It
+      also means that the Linux binaries can load and exec FreeBSD binaries,
+      if there are no corresponding Linux binaries present, and that you could
+      place a &man.uname.1; command in the <filename>/compat/linux</filename>
+      directory tree to ensure that the Linux binaries could not tell they
+      were not running on Linux.</para>

    <para>
      $B$5$i$K(B, Linux $B%(%_%e%l!<%7%g%s$O>u67$K1~$8$F(B
      <emphasis>reroots</emphasis> $B;2>H$r9T$J$$$^$9(B.
      $B$3$l$O$D$^$j(B, <literal>union</literal> $B%*%W%7%g%s$r;XDj$7$F(B
      $B%^%&%s%H$5$l$?%U%!%$%k%7%9%F%`(B(unionfs $B$G$O(B<emphasis>$B$"$j$^$;$s(B!</emphasis>)$B$,(B
      $B9T$J$C$F$$$k$3$H$HF1$8$G$9(B.
      $B%U%!%$%k$r8!:w$9$k:]$K$O$^$:(B
      <filename>/compat/linux/<replaceable>original-path</replaceable></filename>
      $B%G%#%l%/%H%j$r(B, <emphasis>$B$=$l$+$i(B</emphasis>$B8+$D$1$i$l$J$+$C$?$H$-$K$N$_(B, 
      <filename>/<replaceable>original-path</replaceable></filename>
      $B$rD4$Y$^$9(B.
      $B$3$&$9$k$3$H$G(B, $BB>$N%P%$%J%j$rMW5a$9$k%P%$%J%j$N<B9T$r2DG=$K$7$F$$$^$9(B
      ($B$7$?$,$C$F(B, Linux toolchain $B$O%(%_%e%l!<%7%g%s4D6-2<$G40A4$KF0:n$9$k$o$1$G$9(B).
      $B$^$?$3$l$O(B, $B$b$7BP1~$9$k(B Linux $B%P%$%J%j$,B8:_$7$J$$>l9g$K(B
      Linux $B%P%$%J%j$,(B FreeBSD $B%P%$%J%j$r%m!<%I$7$?$j(B, $B<B9T$7$?$j$9$k$3$H$,2DG=$G$"$k$3$H(B, 
      $B$=$N(B Linux $B%P%$%J%j$K<+J,<+?H$,(B Linux $B>e$G<B9T$5$l$F$$$J$$$3$H$r(B
      $B5$IU$+$;$J$$$h$&$K$9$kL\E*$G(B, &man.uname.1; $B%3%^%s%I$r(B
      <filename>/compat/linux</filename> $B%G%#%l%/%H%j$K(B
      $BCV$/$3$H$,$G$-$k(B, $B$H$$$&$3$H$r0UL#$7$^$9(B.
    </para>
                       
+    <para>In effect, there is a Linux kernel in the FreeBSD kernel; the
+      various underlying functions that implement all of the services provided
+      by the kernel are identical to both the FreeBSD system call table
+      entries, and the Linux system call table entries: file system
+      operations, virtual memory operations, signal delivery, System V IPC,
+      etc&hellip;  The only difference is that FreeBSD binaries get the FreeBSD
+      <emphasis>glue</emphasis> functions, and Linux binaries get the Linux
+      <emphasis>glue</emphasis> functions (most older OS's only had their own
+      <emphasis>glue</emphasis> functions: addresses of functions in a static
+      global <literal>sysent[]</literal> structure array, instead of addresses
+      of functions dereferenced off a dynamically initialized pointer in the
+      <literal>proc</literal> structure of the process making the
+      call).</para>

    <para>
      $BMW$9$k$K(B, Linux $B%+!<%M%k$,(B FreeBSD $B%+!<%M%k$NFbIt$KB8:_$7$F$$$k$o$1$G$9(B.
      $B%+!<%M%k$K$h$C$FDs6!$5$l$k%5!<%S%9A4$F$N<BAu$N4pAC$H$J$k$5$^$6$^$J4X?t$O(B,
      FreeBSD $B%7%9%F%`%3!<%k%F!<%V%k%(%s%H%j$H(B
      Linux $B%7%9%F%`%3!<%k%F!<%V%k%(%s%H%j$N(B
      $BN>J}$G6&DL$KMxMQ$5$l$F$$$^$9(B.
      $B$3$l$i$K$O%U%!%$%k%7%9%F%`=hM}(B, $B2>A[%a%b%j=hM}(B, $B%7%0%J%kEAAw(B, System V IPC
      $B$J$I$,4^$^$l$^$9$,(B, 
      FreeBSD $B%P%$%J%j$O(B, FreeBSD <emphasis>$B%0%k!<(B</emphasis>($BLuCm(B: glue;
      $BFs<T$N4V$rCg2p$9$k$H$$$&0UL#(B)$B4X?t72(B,
      $B$=$7$F(B Linux $B%P%$%J%j$O(B Linux <emphasis>$B%0%k!<(B</emphasis>$B4X?t72$rMQ$$$k(B,
      $B$H$$$&E@$@$1$,0[$J$j$^$9(B($B2a5n$KB8:_$7$?$[$H$s$I$N(B OS $B$O(B,
       $B<+J,<+?H$N$?$a$N(B<emphasis>$B%0%k!<(B</emphasis>$B4X?t72$7$+Hw$($F$$$^$;$s(B.
       $BA0=R$7$?$h$&$K(B, $B%7%9%F%`%3!<%k$rH/9T$9$k:](B,
       $B3F!9$N%W%m%;%9$N(B <literal>proc</literal> $B9=B$BNFb$K$"$k(B,
       $B%m!<%@$K$h$C$FF0E*$K=i4|2=$5$l$k%]%$%s%?$r;2>H$7$F%"%I%l%9$rF@$kBe$o$j$K(B,
       $B@EE*$G%0%m!<%P%k$J(B <literal>sysent[]</literal> $B9=B$BN$NG[Ns$K(B
       $B%7%9%F%`%3!<%k4X?t$N%"%I%l%9$,D>@\3JG<$5$l$F$$$k$N$G$9(B).
      </para>

+    <para>Which one is the native FreeBSD ABI?  It does not matter.  Basically
+      the only difference is that (currently; this could easily be changed in
+      a future release, and probably will be after this) the FreeBSD
+      <emphasis>glue</emphasis> functions are statically linked into the
+      kernel, and the Linux glue functions can be statically linked, or they
+      can be accessed via a kernel module.</para>
+                       
+    <para>Yeah, but is this really emulation?  No.  It is an ABI
+      implementation, not an emulation.  There is no emulator (or simulator,
+      to cut off the next question) involved.</para>

    <para>
      $B$5$F(B, $B$I$lK\Mh$N(B FreeBSD ABI $B$H8F$V$Y$-$J$N$G$7$g$&$+(B?
      $B<B$O(B, $B$I$A$i$,K\Mh$N$b$N$G$"$k$+$H$$$&$3$H$rO@$:$k$3$H$K0UL#$O$"$j$^$;$s(B.
      $B4pK\E*$K(B, FreeBSD <emphasis>$B%0%k!<(B</emphasis>$B4X?t72$O%+!<%M%k$NCf$K@EE*$K%j%s%/$5$l$F$$$F(B,
      Linux <emphasis>$B%0%k!<(B</emphasis>$B4X?t72$O@EE*$K%j%s%/$9$k$3$H$b(B,
      $B%+!<%M%k%b%8%e!<%k$r2p$7$FMxMQ$9$k$3$H$b$G$-$k$h$&$K$J$C$F$$$k(B,
      $B$H$$$&0c$$$,$"$k$@$1(B($B$?$@$7$3$l$O8=;~E@$K$*$$$F$NOC$G$9(B.
       $B$3$l$O>-Mh$N%j%j!<%9$GJQ99$5$l$k2DG=@-$,$"$j$^$9$7(B,
       $B$*$=$i$/<B:]$KJQ99$5$l$k$G$7$g$&(B)$B$@$+$i$G$9(B.
    </para>
                       
    <para>
      $B$"(B, $B!V$G$b$3$l$OK\Ev$K%(%_%e%l!<%7%g%s$H8F$Y$k$N$+!W$C$F(B?
      $BEz$($O!V$$$$$(!W$G$9(B. $B$3$l$O0l$D$N(B ABI $B<BAu$K$9$.$:(B,
      $B%(%_%e%l!<%7%g%s$H$O0[$J$j$^$9(B. $B%(%_%e%l!<%?(B($B%7%_%e%l!<%?$G$b$J$$$3$H$r(B
      $B$"$i$+$8$aCG$C$F$*$-$^$7$g$&(B)$B$,8F$S=P$5$l$F$$$k$o$1$G$O$"$j$^$;$s(B.
    </para>
    
+    <para>So why is it called &ldquo;Linux emulation&rdquo;?  To make it hard
+      to sell FreeBSD!  <!-- smiley -->8-).  Really, it is because the
+      historical implementation was done at a time when there was really no
+      word other than that to describe what was going on; saying that FreeBSD
+      ran Linux binaries was not true, if you did not compile the code in or
+      load a module, and there needed to be a word to describe what was being
+      loaded&mdash;hence &ldquo;the Linux emulator&rdquo;.</para>

    <para>
     $B$G$O(B, $B$I$&$7$F(B &ldquo;Linux $B%(%_%e%l!<%7%g%s(B&rdquo; $B$H8F$V$N$G$7$g$&$+(B?
     $B$=$l$O$b$A$m$s(B FreeBSD $B$NGd$j$K$9$k$?$a(B <!-- smiley -->8-) $B$G$b$"$k$N$G$9$,(B,
     $B<B:]$K$O(B, $B<!$N$h$&$JM}M3$K$h$j$^$9(B.
     $B$3$N5!G=$,=i$a$F<BAu$5$l$?:"(B, $BF0:n86M}$r@bL@$9$k0J30$K(B
     $B$3$N5!G=$rI=8=$9$k8@MU$O$"$j$^$;$s$G$7$?(B.
     $B$7$+$7(B, $B%3!<%I$r%3%s%Q%$%k$7$?$j%b%8%e!<%k$r%m!<%I$7$J$$>l9g(B,
     $B!V(BFreeBSD $B>e$G(B Linux $B%P%$%J%j$r<B9T$9$k!W8@$&I=8=$O(B,
     $B87L)$K9M$($k$HE,@Z$G$O$"$j$^$;$s(B.
     $B$=$3$G(B, $B$=$N:]$K%m!<%I$5$l$F$$$k$b$N<+?H$rI=8=$9$k8@MU(B&mdash;$B$9$J$o$A(B
     &ldquo;Linux $B%(%_%e%l!<%?(B&rdquo;$B$,I,MW$@$C$?$N$G$9(B.
    </para>

   </sect1>
 </chapter>

----Next_Part(Sun_Sep_19_21:39:56_1999_518)--
Content-Type: Application/Octet-Stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="chapter.sgml.112_113.diff.gz"

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

----Next_Part(Sun_Sep_19_21:39:56_1999_518)----
