## 6.2. Preferences and Providers

Once all the `.bb` files have been parsed, BitBake starts to build the target (`core-image-sato` in the previous section's example) and looks for providers of that target. Once a provider is selected, BitBake resolves all the dependencies for the target. In the case of `core-image-sato`, it would lead to `packagegroup-core-x11-sato`, which in turn leads to recipes like `matchbox-terminal`, `pcmanfm` and `gthumb`. These recipes in turn depend on `eglibc` and the toolchain.

Sometimes a target might have multiple providers. A common example is "virtual/kernel", which is provided by each kernel package. Each machine often selects the best kernel provider by using a line similar to the following in the machine configuration file:

         PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"

The default `PREFERRED_PROVIDER` is the provider with the same name as the target.

Understanding how providers are chosen is made complicated by the fact that multiple versions might exist. BitBake defaults to the highest version of a provider. Version comparisons are made using the same method as Debian. You can use the `PREFERRED_VERSION` variable to specify a particular version (usually in the distro configuration). You can influence the order by using the `DEFAULT_PREFERENCE` variable. By default, files have a preference of "0". Setting the `DEFAULT_PREFERENCE` to "-1" makes the package unlikely to be used unless it is explicitly referenced. Setting the `DEFAULT_PREFERENCE` to "1" makes it likely the package is used. `PREFERRED_VERSION` overrides any `DEFAULT_PREFERENCE` setting. `DEFAULT_PREFERENCE` is often used to mark newer and more experimental package versions until they have undergone sufficient testing to be considered stable.

In summary, BitBake has created a list of providers, which is prioritized, for each target.