The first release of OpenVox, the OSS implementation of Puppet
overlookinfratech.com
overlookinfratech.com
2. OpenVox sounds like a text to speech engine.
3. What is the main use case of Puppet / OpenVox in 2025? Same as always? Isn't CM a lot less relevant in the age of platforms like Flatcar and Bottlerocket?
4. Why fork puppet instead of contributing to ansible or salt?
Companies with 100s to 1000s of hours of investment in software like Puppet aren't going to rearchitect without being forced to. By the application becoming unsuitable for current needs, or due to cost.
Broadcom bought out VMWare and jacked the price up by unworkable amounts. Puppet is now owned by a venture capital company and the non-zero possibility is they'll follow Broadcom's playbook. That's why Puppet is being forked.
Why not contribute to Ansible or Salt? What individual programmers do in their spare time is irrelevant to the majority of users of those products.
CM is useful here. And usually in the bootstrapping of such architectures.
Doesn't that just move where you need CM a bit?
What developers tend to do when forced to use immutable infra is to move configuration from on-disk files to RAM and query it using network API from a central system. The problem is that it makes systems less reliable. If a VM/server restarted it can practically always read a config form disk but if you service relies on an external system to get runtime configuration it would not work if this external system is down, overloaded, misconfigured, returns wrong config because of a bug e. t. c. And it does happen in practice even when system designers tell they configuration API is very reliable (in theory). After seeing such systems fail I like simple on-disk configs more and more.
"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors."
The names of things today is terrible. If I hadn't known what Puppet was, even vaguely, I would have thought this was some kind of speech recognition or TTS project as well. This may as well be called "FileDefrag" or "OpenSec".
Puppet and Ansible (not sure about Salt) works very differently. Puppet is pull based, as in each client pulls their configuration from a central server at regular intervals, where as Ansible pushes a configuration when asked. Puppet is also more of a "Ensure that my client is in this state" while Ansible can be see as "Run these steps on the client", that's not a 100% accurate and people have also made Ansible work in a pull configuration, but I feel that makes picking one over the other a little simpler.
In any case, Puppet is easier to scale to thousands of servers. Ansible is easier to develop for and easier to upgrade or run multiple versions simultaneously. It two different approaches to the same/similar problem, but they are fare from interchangeable.
1: https://docs.ansible.com/ansible/11/cli/ansible-pull.html
I would have expected the opposite. Pushing changes as required seems easier when the head node is the only one with smarts deciding on what happens next. Unless Ansible has some hard cap on how many servers it can direct in parallel?
Presuming there's no need for orchestration between nodes (which pull-based configs make very hard/impossible), pull-based systems parallelize perfectly where push-based systems cannot parallelize.
SSH is also very slow as far as these things go. At some point the head node just gets saturated on doing SSH encryption or the NIC.
There are other ways to use the tool, however. In contrast with a centralized infrastructure, it's also possible to just collect a few puppet manifests in git, then you simply clone the repo and run `puppet apply` on demand.
Puppet is still a powerful language for declarative representation of system configuration. Works to apply a specific configuration at a specific time or as a way to automate the construction of VM images.
One place puppet excels is when you want to reuse a bit of configuration in bare metal, virtual machine or container images. With puppet you can pretty easily generate all three from one source of truth with minimal special-cases for the config variants.
All that being said, I haven't reached for puppet as my first choice tool in quite some time. Maybe time to change that and give OpenVox a look. It'll be a win if OpenVox saves me from further suffering through the indignity of working with Ansible.
Reminds me of the (bad) plot element from Star Trek: Picard where Picard's son became "Vox" and was able to control people on behalf of the Borg.
Puppet or Puppeteer ?
Ansible is a little bit easier to get started for a few reason (yaml instead of a DSL, ssh only...) ; it's also mostly tasks running through SSH which may feel a bit more "natural" when you are configuring machines initially.
In terms of idempotency I find it is easier in ansible to mess up something but if you are careful they are on par. I've used mostly ansible over the past few years in various jobs but the first I got in touch with ~10 years ago was puppet and it felt very solid especially for heterogeneous environments (we had different archs and OSes to manage). Also puppet scales very well because it has agents as well as many tools to manage large infrastructures which I tried and were already quite convenient 10 years ago.
TL;DR probably use ansible unless you have a very specific use case.
If you have other systems to manage, like Windows or VMware ESX etc., it feels like a kludge with the delegation to localhost to get to the plugins.
Also, it can be tricky to use if your Linux systems have different Python interpreter versions because it's not at all straightforward to override the python interpreter used.
Looping constructs and sub-tasks etc. are also awkward to use, and the initial setup for a small automation project might be overwhelming for newcomers.
On the other hand you get a massive community with plugins for almost every conceivable system/OS, so that's definitely a huge plus
For sure not everything, I get a lot of mileage out of using SSM into ec2 hosts which doesn't even have Internet facing addresses
I am thankful that I've never had to manage Windows but I don't believe they're managed as localhost since if nothing else ansible doesn't offer control node execution on Windows
Puppet always seemed to me like a scalable enterprise solution, but you either need a team to keep it in check, or just never update.
I'm not specifically recommending Ansible, but it's what I've been using for a couple years, and I would always recommend that for home use over Puppet.
Disclaimer: I last used Puppet in 2017, but for like 7 years extensively before that and everything I mentioned happened several times.
Second disclaimer: By now I think parametrizing everything is a huge mistake - the real worth is editing the config in one place and having it in SCM. if you only parametrize 2 lines out of a 100 line config file and basically copy it over with 2x `sed` - that's fine.
And never commit inline secrets. Find out one of the ways to inject/separate/template secrets that's workable for you to stick with it.
Ansible will allow you to do that with just "pip install ansible". Puppet requires you to setup so infrastructure, which you need to way of bootstrapping.
Personally I also find Ansible easier to work with, in the sense that you can more easily do stuff in small increments. Upgrading Ansible is also a lot simpler. Puppet really cool and powerful, but for home stuff or a small business I'm not sure the overhead of managing Puppet itself is worth it.
My favorite part of puppet is demonstrated well by the trifects:
package { 'openssh-server':
ensure => installed,
}
file { '/etc/ssh/sshd_config':
source => 'puppet:///modules/sshd/sshd_config',
owner => 'root',
group => 'root',
mode => '0640',
notify => Service['sshd'], # sshd restarts whenever you edit this file.
require => Package['openssh-server'],
}
service { 'sshd':
ensure => running,
enable => true,
}
That will keep SSH installed, a service running, and the puppet config file managed forever. If you accidentally replace the config file it will be fixed and the service restarted. If you remove the package it will be reinstalled, config file updated, and service started.Not a fan of ansible, it's more of a "run this playbook", which translates to reinstall and "run this playbook", which in environments that don't reinstall very often can be painful. Since ansible playbooks don't know the current machines state they never know exactly what commands to run.
Generally if you spin up containers or similar short term servers I think ansible is fine. If it's a larger and more complicated environment with longer lived servers I'd use puppet.
Oh, one other think I like about puppet is if you say apply X to all nodes, you can literally not run puppet (it will fail to compile the manifests) if you try to override it. Which security auditors LOVE.
Summary of what I can find: It seems Perforce have announced they will stop providing open source puppet's public binaries and the public package repositories. Private access to their binaries will require either developer license (with one of the limits being 25 nodes) or a commercial license. Secondly, they are reducing public source code contributions to Puppet. A response to this by Overlook InfraTech / Vox Pupuli has resulted in a fork called OpenVox.
Regarding the first issue, Perforce's halt to providing open source puppet's public binaries / package repos: Posted on the "Puppet By Perforce" blog 2024-11-07 https://www.puppet.com/blog/open-source-puppet-updates-2025
> In early 2025, Puppet will begin to ship any new binaries and packages developed by our team to a private, hardened, and controlled location.
> Community contributors will have free access to this private repo under the terms of an End-User License Agreement (EULA) for development use. There will be no license changes for the open source version of Puppet.
This is backed up by nightlies suspended from 2024-11-06 https://nightlies.puppet.com/apt/dists/index.html . From the blog post, it would appear that access to binaries is only going to be free for 25 nodes.
> The new development license is an EULA that allows developers free access to our hardened Puppet releases (up to 25 nodes). Capacities higher than 25 nodes will require a Puppet Labs Support Commercial License.
> Community developers will continue to have access to binaries and packages for development purposes under a new developer license (EULA).
Releases prior to the annoucement appear available, but there is no statement suggesting that will remain in the blog post. I have a few dozen physicals and a few dozen VMs running puppet but don't have a commercial license, so this will impact me.
Regarding the second issue, reducing public source code contributions to Puppet, there is this from the same blog post:
> We will release hardened Puppet releases to a new location and will slow down the frequency of commits of source code to public repositories.
Regarding the community response, it seemed to start with providing community packages and has become the "soft fork"? From https://voxpupuli.org/openvox/
> OpenVox started life as a Puppet™ mirror by Overlook InfraTech to continue providing community packages when Perforce discontinued public packaging efforts in late Fall of 2024. It soon became clear that they were also moving all further Puppet™ development to internal forks and ceasing development on open source Puppet™. A community fork using Overlook InfraTech's packaging pipeline was the inevitable response.
> We consider OpenVox a soft-fork because we intend to maintain downstream compatibility for as long as we are able. As such, we've created a Puppet™ Standards Steering Committee to set the direction of features and language evolutions and have invited Perforce to participate.