As both FreeBSD and Linux use Intel ACPA-CA, the basic architecture of their ACPI subsystems is similar. The major differences are in user interface and bus enumeration. For user interface, FreeBSD uses sysctls, which are variables that kernel exports. Linux uses the ``procfs'' filesystem. While both system have procfs, FreeBSD uses procfs purely for query process information. The sysctl interface is interface provides a tree of for kernel tunable variable. We export some ACPI information such as temperature temperature to userspace via the sysctl interface.
The ACPI-CA code is currently distributed with a user-space ACPI interpreter which is the counterpart of FreeBSD's amldb(8) and ASL assembler. But ACPI-CA has no disassembler tool (like FreeBSD's acpidump(8)) that produces ASL compatible with the ACPI-CA ASL assembler.
In Linux, there were no generalized ways to create device trees, so Intel used a ``bus manager'' mechanism to recognize ACPI-specific devices. The bus manager abstraction was introduced when the ACPI-CA was developed and build under WIN32. We decided not to use it early in our development process because it collides with the FreeBSD driver recognition mechanism. But the Intel Linux-ACPI team recognized the necessity of the unified mechanism to configure devices (including non-ACPI ones), so they proposed a mechanism called ``Linux Driver Model.'' This mechanism will be introduced in next major version of the Linux kernel (2.5).
FreeBSD uses a three stage boot loader. Currently the FreeBSD boot loader detects ACPI by scanning the BIOS memory and loads the acpi kernel module automatically if it is needed. Linux use initrd mechanism to do early configuration. Initrd is special memory filesystem loaded by the boot loader. This file system is mounted as root for initial configuration such as module loading. After the configuration is finished, the file system is unmounted or moved to another mount point.