This question is not about text editor named 'atom'.

Portage man pages use the term 'ATOM', but I can't find a definition of this term and got confused. I understand that atom describes a package, but I can't tell which of the following items are atoms:

  • Please check the ebuild(5) man page.
    – user22304
    Dec 3, 2017 at 17:07
  • 1
    @FrancescoTurco. I've seen it before posting the question and checked it again. But still I can't tell which of the items in my question are atoms and which are not.
    – lesnik
    Dec 3, 2017 at 18:27
  • 1
    @FrancescoTurco That man page never defines 'atom'
    – PiedPiper
    Dec 4, 2017 at 0:25

1 Answer 1


According to the ebuild(5) man page, under "Dependencies":

A depend atom is simply a dependency that is used by portage when calculating relationships between packages.

It then goes on to describe different types of atoms:

  1. Atom bases: a bare category/package name (e.g. dev-lang/python)
  2. Atom versions: as above, but with a version (e.g. dev-lang/python-3.4.5)
  3. Atom prefix operators: versioned atoms with boolean operators (e.g. >=dev-lang/python-3.4.5)
  4. Extended atom prefixes/postfixes: wildcards and blockers (e.g. dev-lang/python-3*)
  5. Atom slots/sub-slots: versions of a package that can co-exist (e.g. dev-lang/python-3.4.5:3.4/3.4m, which can be installed at the same time as :2.7 and :3.6, for example)
  6. Atom USE statements: deals with USE flags

This is what ebuilds use internally and is not really necessary for everyday use, as only package maintainers see these regularly (you will see slots, though.)

Portage's use of atoms is slightly different, however. According to its man page, it supports the following atom types:

  1. Base: bare category/package (e.g. dev-lang/python)
  2. Version: category/package-version (e.g. dev-lang/python-3.4.5), with or without comparison operators
  3. Slot: category/package-version:slot (e.g. dev-lang/python-3.4.5:3.4)
  4. Repository: category/package-version::repository (e.g. dev-lang/python::gentoo)
  5. Wildcards: arbitrary substitution (e.g. dev-lang/*, or =*/*-9999)

They're not really used in a a dependency sense, but as they are sent to the ebuild system they roughly follow the same rules. You can combine these as well, so "<*/python*-9999:3.6::test" would be a valid atom specification. I generally stick with base, versioned, and repository atoms though, as slots are generally not important and wildcards can match unintended things if you're not careful.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .