- Implement packager-specific DSLs. Packagers now define their own custom methods that may be configured using the `package` block in a project file. For more information, please see the README or any of the embedded "Building on X" documents.
- Use vendored assets. In previous versions of Omnibus, the generator would create resource assets for DMG, PKG, and MSI packages, regardless of whether you intended to build those packages. This could cause repo bloat and information overload. In Omnibus 4, the default generator does not create these assets, and instead prefers "general" vendored assets. If you are planning to make a resource-intensive package (such as a PKG or MSI), it is encouraged you generate these assets by specifing the `--pkg-assets` flag during project generation. Omnibus will prefer local resources in the `resources/` directory and then fall-back to "sane" defaults which are vendored within Omnibus.
- Added `Config.workers` key for specifying the maximum number of parallel events to take place.
- Added parallel downloads for fetcher objects.
- Use `fakeroot` for building DEBs and RPMs.
- Raspberry Pi platform support (Raspian, Pidora).
- Retry uploads to Artifactory on publish failures.
### Potentially Breaking Changes
- Remove embedded functional tests. Because the functional tests were skipped on CI (and require a system of each type to properly execute), they have been removed. Chef has created the [omnibus-harmony](https://github.com/opscode/omnibus-harmony) pipeline to perform true integration testing using the in-house CI cluster. If you were relying on the integration tests (or the associated Rake tasks), they have been removed.
- Truncate SLES and other RedHat derivatives platform version.
- Refactor logger objects to separate Omnibus internal debugging info with build/compile/configure debugging info.
- Improve error and debugging output when an exception is raised while shelling out. Failed shell commands will now raise `Omnibus::CommandFailed` and `Omnibus::CommandTimeout` instead of the `Mixlib::ShellOut` exceptions. If you were previously rescuing the Mixlib exceptions, you should switch to the new ones.
- XL C is now the default compiler on AIX
- Clang is now the default compiler on FreeBSD 10+
- Make compilation default `-static-libgcc` on Solaris
- Only allow installation on system volume for Mac OS X PKGs.
### Definitely Breaking Changes
- Previously deprecated methods have been removed.
- Removed `Software#source_dir`. You can use `Omnibus::Config.source_dir` instead, but if you need access to this method, it is probably a bug in Omnibus.
- Removed `Software#cache_dir`. You can use `Omnibus::Config.cache_dir` instead, but if you need access to this method, it is probably a bug in Omnibus.
- Removed `Software#config`. You can use `Omnibus::Config` instead.
#### Builder
- Added `Builder#make` for choosing the correct `make` binary on the system. When `gmake` is present, it is preferred. The use of this method also sets the `MAKE` environment variable for consistency. You should change all instances of `command "make ..."` to `make "..."` to ensure true cross-platform building.
- Added `Builder#windows_safe_path` for shelling out to the system with the correct path separators.
- Added `Buidler#workers` for delegation to the config option.
- Removed `Buidler#max_build_jobs` in favor of `Builder#workers`.
- Add an `Builder#appbundle` function to the builder DSL
#### Packagers
- Added `Packager::DEB#vendor` for specifying the package vendor.
- Added `Packager::DEB#license` for specifying the package license.
- Added `Packager::DEB#priority` for specifying the package priority.