[[!comment format=mdwn
 username="joey"
 subject="""supported OS's and how to add more"""
 date="2014-12-07T15:58:03Z"
 content="""
Propellor supports Debian and its derivatives, as well as FreeBSD and
ArchLinux. See
<http://hackage.haskell.org/package/propellor-5.4.0/docs/Propellor-Types-OS.html>

Propellor keeps track of what OS's each property supports, as part of the
type of the propery. So for example, it has separate properties for Debian
and for FreeBSD that keep the OS's upgraded using their respective
package managers:

	Apt.upgraded :: Property DebianLike
	
	Pkg.upgraded :: Property FreeBSD

Properties can be combined using `pickOS` to make a property that works
on multiple OS's:

	upgraded :: Property (DebianLike + FreeBSD)
	upgraded = Apt.upgraded `pickOS` Pkg.upgraded

The `pickOS` function lets a single property do different things for
different OS's.

The ArchLinux and FreeBSD ports were done by propellor users,
and both are good examples of the scope of the changes involved in making
propellor support a new OS. 

Here are Zihao Wang's commits for ArchLinux support:

* add types for Arch Linux [[!commit 442fa3706de3d7329552c78d314b5a8f653ca65d]]
* bootstrap propellor using Pacman [[!commit 44f7f7f1c3014586fd574ba1d10a1063204850a7]]
* add properties for Pacman [[!commit 5b946ea4e32657f64771f3e2ef8bc865afc4c1fc]]
* add ArchLinux support to specific properties
  [[!commit 92168164943dcf033682b9f9a26f81beb3c537f4]]
  [[!commit 0b936d63931baa9cda6b243cf643ad1c71ce5c0b]]
  [[!commit f95e4fc7dccb9691b8185166c44f83ce884463dc]]
* fixed type of a property that wrongly claimed to support any Linux but actually
  only supported DebianLike [[!commit 7781c8098f45481ac03c5ede989614eb8411a6aa]]
"""]]
