<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 arch="ml_32,ml_x32,ml_all" id="pre-multilib">
  <?dbhtml filename="multilib.html"?>

  <title>About the Multilib Edition</title>

  <sect2><title>What is Multilib</title>

    <para>Today, most systems in the x86 world have a word size of 64 
      bit. The word size is a number of bits which can be used at once
      in the most efficient way. Previous architectures of x86 processors
      had a word size of 32 bit which means they have a different 
      understanding of what is the best alignment of data in memory as
      well as they have a different mechanism to address a different size
      of memory. Even the instruction set of the 64 bit processors is 
      quite simmilar to the instructions of 32 bit processors, binaries
      (objects compiled to machine code) cannot directly be executed on
      64 bit systems.</para>

    <para>Multilib is a mechanism to provide support for the 32 bit 
      binaries so that they can be executed of modern 64 bit CPUs.</para>

  </sect2>

  <sect2><title>Why doing Multilib?</title>

    <para>From a educational point of view, LFS in its 'native' form is
      probably the best way to see how a Linux system is built from source.
      There is no need to confuse with different architectures. But when
      there is a need to run 32 binaries and you don't want to build the 
      whole system in 32 bit (which would be waste of ressources 
      nowadays) than LFS-multilib is an option. Examples for such a
      need could be
      <itemizedlist>
        <listitem><para>Closed-source software without source only 
          available for 32 bit. That may be the case for printer driver 
          or any other kind of hardware drivers, the company provides 
          the binaries. If you have such a driver, LFS-multilib 
          may help you getting the stuff running</para>
        </listitem>
        <listitem><para>If you want to go far beyond LFS and setup a 
          virtualization platform like <application>VirtualBox</application>,
          you will need multilib support</para>
        </listitem>
        <listitem><para>or even just because you can</para>
        </listitem>
      </itemizedlist>
      
    </para>

    <para>The multilib edition of LFS goes a small step beyond and a 
      small step back to what has been said in the previous section 
      when talking about target architectures. On one hand, the multilib 
      edition is focused and <emphasis>limited</emphasis> to x86_64 
      architectures only, on the other hand, it <emphasis>expands</emphasis>
      the instructions to utilize both possible architectures, namely
      32-bit as well as 64-bit.</para>

    <para>It also goes a bit beyond the basic educational 
      approach of LFS which is to show you how to build a Linux system. 
      To achieve this, no support for additional architectures than 
      the default one for your system is required. If you haven't 
      previously built by the standard LFS book, you are encouraged to 
      do so before using this edition.</para>

  </sect2>

  <sect2><title>Building a Multilib System</title>

    <para>Building a multilib system is not that much different from 
      building a system by using the 'native' LFS book. Beside some 
      tweaks here and there the most prominent difference is that 
      multilib requires compiling some applications up to three times:
      one for the primary 64-bit architecture,
      one for the 32-bit architecture (m32),
      and once again for the 32-bit architecture with is 32-bit memory 
      access and 64 bit instruction set (mx32).</para>

    <para>Continue only if you and your system meets the following 
      requirements:
      <itemizedlist>
        <listitem><para>you have a x86_64 compatible machine</para></listitem>
        <listitem><para>you already have some experience with LFS</para></listitem>
        <listitem><para>you have a need for 32-bit support</para></listitem>
      </itemizedlist>
    </para>

    <para>If you passed all three requirements, go ahead and build LFS 
      in multilib mode.</para>

  </sect2>

</sect1>
