blob: d27ba506a68497824e0fb01ef3a4b72352596750 [file] [log] [blame] [view]
# Fuchsia's software model
Fuchsia is an operating system that does many things differently from
traditional operating systems. Before you attempt to develop for Fuchsia, it is
important to understand how the software model works in Fuchsia.
In Fuchsia, almost everything is a component and it is the unit of
executable software. The Component framework is what runs all components on
Fuchsia. For more information on components and the component framework, see
[Introduction to the Fuchsia component framework](/docs/concepts/components/v2/introduction.md).
An API dependency allows different components to define a dependency on another
component. These API dependencies are abstract which means that the implementation
of the interface is defined by another component and resolved by the component
framework. Components communicate with their dependencies through FIDL, which is
the language that Fuchsia uses to describe interprocess communication (IPC)
protocols of components that run on Fuchsia. For more information on FIDL, see
[FIDL overview](/docs/concepts/fidl/overview.md).
## Distributing components through packages
In Fuchsia, components and their dependent files and images are often
distributed through packages which is the unit of distribution in Fuchsia.
Components can only use shared libraries that are included in the same
package as the component. This allows multiple components in the same package
to use the same shared library. This is known as an ABI dependency.
Note: For more information on packages, see [Fuchsia packages](/docs/concepts/packages/package.md)
There is no concept of inter-package dependencies because transitive dependency
closures have unbounded resolution time. Components are organized to keep
critical dependencies in a package, and service dependencies are resolved by
runtime resolution, and do not specify exact peer implementations or versions.
This is known as an API dependency.
Note: Executable components (programs) implement API dependencies through
[FIDL](/docs/concepts/fidl/overview.md)
Fuchsia resolves dependencies at runtime instead of resolving at install
time like most other operating systems. This applies to API dependencies,
but not to ABI dependencies. This approach is similar to a web services
architectural model.