These are just personal notes, please ignore this page.
this is very rough...
Some packages depend on other packages having particular USE flags set, these are required USE flags. In this case, when trying to emerge a package Portage will sometimes state that a dependency will require specific USE flag to be set or unset.
There are also packages for which activating a USE flag will require the setting or unsettling of other USE flags. This case usually comes about when a compile time option is exclusive of others, or needs another option to be set. Think of the example of a package that uses an audio backend - it could have a choice of two backends, but only one may be active at once. All USE flag constraints run along this model, but can be a bit more complex, depending on how a package was developed.
The requirements must be met for Portage to be able to proceed with installation. They impose a decision on the user, to set up USE flags in a way to permit installation.
When USE flags are required, Portage outputs a code, such as:
The following REQUIRED_USE flag constraints are unsatisfied: <if USE flag X enabled>? (<require USE flag Y>)
The active USE flag that imposes a constraint comes first and is followed by a question mark ("?"), followed by the flag or flags that the activation of the first flag requires. Requirements can be chained, if flag X requires flag Y, that in turn requires flag Z.
As well as requiring the activation of certain flags, USE flag constraints can sometimes require the deactivation of a flag or flags. In this case, the flag that must be deactivated to satisfy the constraint is preceded by an exclamation mark ("!").
<if USE flag X enabled>? (<require USE flag Y> (<require USE flag Z> !<require USE flag W be deactivated>) !<require USE flag X be deactivated>)
Required USE flags are not activated automatically, in order that the user choose explicitly what the desired behavior.