class: center, middle, inverseold # Vox Pupuli
## Hinter jedem erfolgreichen Open Source Projekt steht
eine lebhafte Community --- ## $ whoami
* Tim 'bastelfreak' Meusel * Bei [Vox Pupuli](https://voxpupuli.org/) aktiv seit 2015 * Für einen sehr kleinen lokalen Hoster gearbeitet * Vox Pupuli (PMC) * Wohnhaft in ~~Köln~~ -> Koblenz * Senior IT Automation Consultant für [betadots](https://betadots.de/) * Slides: [bastelfreak.de/froscon2025/](https://bastelfreak.de/froscon2025/#1)
??? * Wer kennt das Bild von GitHub? * Foto wird 16 Jahre alt im September --- class: center, middle, inverse # Was ist
Puppet? ??? * Wer war in meinem Vortrag letztes Jahr? * Wer kennt Puppet? --- .left-column[ ## Puppet ### Was? ] .right-column[ * Infrastructure as Code (IaC) Software ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Puppet ### Was? ] .right-column[ * Infrastructure as Code (IaC) Software * Eigene deklarative Sprache, Puppet DSL ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Alternatives like Salt/Ansible don't, they are mostly YAML --- count: false .left-column[ ## Puppet ### Was? ] .right-column[ * Infrastructure as Code (IaC) Software * Eigene deklarative Sprache, Puppet DSL * Erfunden/entwickelt von Puppet Inc (jetzt Perforce) ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Puppet ### Was? ] .right-column[ * Infrastructure as Code (IaC) Software * Eigene deklarative Sprache, Puppet DSL * Erfunden/entwickelt von Puppet Inc (jetzt Perforce) * Apache 2 Lizenz mit CLA, bis November 2025 ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- .left-column[ ## Puppet ### Was? ### Wie? ] .right-column[ Beispiel Klasse für nginx ```puppet \# @summary configures nginx in a bad way \# @param content the whole nginx config class nginx ( Sensitive[String[1]] $content, ) { package { 'nginx': ensure => 'installed', } -> file { '/etc/nginx/nginx.conf': ensure => 'file', content => $content, } ~> service { 'nginx': ensure => 'running', enable => true, } } ``` ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * example class of three resources. A resources describes one specific thing on a system --- .left-column[ ## Puppet ### Was? ### Wie? ] .right-column[ * Ein oder mehrere Klassen bilden ein Puppet Modul * glorifiziertes .tar.gz Archiv * Ähnlich eines Ruby Gems oder Python Paketes ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Puppet ### Was? ### Wie? ] .right-column[ * Ein oder mehrere Klassen bilden ein Puppet Modul * glorifiziertes .tar.gz Archiv * Ähnlich eines Ruby Gems oder Python Paketes * Meistens lebt ein Modul in einem Git(Hub) Repo * Ein Modul verwaltet eine Software Komponente ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * grouping resources based on software component makes modules exchangeable and composable! --- class: center, middle, inverse # Wer benutzt
Open Source Software? ??? * easy question as a warm up --- class: center, middle, inverse # Wer wollte einen
Bug reporten? ??? * Among this group, who wanted to report a bug or provide a patch? --- class: center, middle, inverse # Wer nutzt tote
Open Source Software? ??? * Wer hat während des bugreports gemerkt dass das projekt nur einer person gehört die seit 3 jahren nichts mehr daran gemacht hat? You might guess where this is going --- class: center, middle, inverse # Was ist dieses
Vox Pupuli Ding? ??? Now a question I will try to answer for you, what is vox pupuli * Who heard about it before? --- .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? Some stats. A group that: * 150 Puppet modules in 2021. 190 *active* modules at the moment --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * 43 Ruby Gems in 2021, 54 *active* gems at the moment --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! * Freundliche und hilfsbereite Community ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * We've a code of conduct at least since 2016 and had a single violation * A person wasn't polite to a few others --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! * Freundliche und hilfsbereite Community * Aufgeschlossen für neue Mitglieder und Technologien ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * new people are always welcome and it's easy to participate * usually interact via IRC or via GitHub issues and pull requests * Puppet/Perforce has a slack community. Our slack room is bridged with our IRC channel * technology: example conversation: Hey can I add gentoo support to a module? Or Arch Linux support? * domain specific experts * Any fellow Arch Linux friends here? --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! * Freundliche und hilfsbereite Community * Aufgeschlossen für neue Mitglieder und Technologien * Ein Zuhause für verwaiste Puppet-Module ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! * Freundliche und hilfsbereite Community * Aufgeschlossen für neue Mitglieder und Technologien * Ein Zuhause für verwaiste Puppet-Module * Ein Kollektiv aus einzelnen Entwicklern aufbauen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Vox Pupuli ### Was? ] .right-column[ * Entwicklung vieler Puppet Module * Und Ruby Gems! * Freundliche und hilfsbereite Community * Aufgeschlossen für neue Mitglieder und Technologien * Ein Zuhause für verwaiste Puppet-Module * Ein Kollektiv aus einzelnen Entwicklern aufbauen * Sicherstellung einer kontinuierlichen Weiterentwicklung ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * We want to work together on modules * together we develop tooling to test our modules --- .left-column[ ## Vox Pupuli ### Was? ### Wer? ] .right-column[ * Vox Pupuli Mitglieder in der GitHub Org  ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * 2021: 161 members in the GitHub org with merge access * now: 213 * every dot marks a presentation about or related to vox pupuli * break even point erreicht? macht jetzt jeder cloud und terraform? oder serverless? oder nocode --- .left-column[ ## Vox Pupuli ### Was? ### Wer? ] .right-column[ * Viele Git Neulinge * `git rebase` ist für viele eine Herausforderung ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ] .right-column[ * Viele Git Neulinge * `git rebase` ist für viele eine Herausforderung * Viele Menschen ohne Erfahrung mit Test Frameworks * Interesse an RuboCop/puppet-lint/rspec-puppet/serverspec ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Those are the tools we use in our CI * talk about them later * CI runs automatically * CI does code annotations * People want to fix/enhance their code because CI feedback is quick and nice --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ] .right-column[ * Viele Git Neulinge * `git rebase` ist für viele eine Herausforderung * Viele Menschen ohne Erfahrung mit Test Frameworks * Interesse an RuboCop/puppet-lint/rspec-puppet/serverspec * SRE/DevOps/Platform/Systems Engineers in kleinen Teams * Nutzen Puppet im Betrieb und wollen öffentlichen Module nutzen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * a team so tiny, often a single person --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ] .right-column[ * Viele Git Neulinge * `git rebase` ist für viele eine Herausforderung * Viele Menschen ohne Erfahrung mit Test Frameworks * Interesse an RuboCop/puppet-lint/rspec-puppet/serverspec * SRE/DevOps/Platform/Systems Engineers in kleinen Teams * Nutzen Puppet im Betrieb und wollen öffentlichen Module nutzen * Puppet Consultants patchen Module für Kunden ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * We provide letter of recognitions or kinda an employment reference * fryher viele admins von legacy infra --- .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Wieso? ] .right-column[ * (Erfolgreiche) FOSS Projekte alleine maintainen ist schwer ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Who of you maintains a open source project --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Wieso? ] .right-column[ * (Erfolgreiche) FOSS Projekte alleine maintainen ist schwer * Erfolgreich impliziert Dokumentation ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Wieso? ] .right-column[ * (Erfolgreiche) FOSS Projekte alleine maintainen ist schwer * Erfolgreich impliziert Dokumentation * Mehr User → Mehr Bugreports and Feature Requests ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Wieso? ] .right-column[ * (Erfolgreiche) FOSS Projekte alleine maintainen ist schwer * Erfolgreich impliziert Dokumentation * Mehr User → Mehr Bugreports and Feature Requests * Maintainer verlieren Interesse, fehlende Zeit, Burnout ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * if a single person maintains a project: the more users you have the more likely it is to burn out * remember earlier when I asked about abandoned software? --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Wieso? ] .right-column[ * (Erfolgreiche) FOSS Projekte alleine maintainen ist schwer * Erfolgreich impliziert Dokumentation * Mehr User → Mehr Bugreports and Feature Requests * Maintainer verlieren Interesse, fehlende Zeit, Burnout * Vox Pupuli möchte dem Vorbeugen * Mit einer großen Gruppe an Maintainern und effizientes Tooling ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * if a single person maintains a project: the more users you have the more likely it is to burn out * remember earlier when I asked about abandoned software? --- .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Zusammenfassung! ] .right-column[ * Vox Pupuli stellt einen Großteil der meist genutzten Module * Perforce hat 162 "öffentliche" Module, Vox Pupuli 194 * Vox Pupuli verwaltet 95% Tools zum testen und veröffentlichen von Modulen * Vox Pupuli verbindet Domain Experts, Entwickler und User ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Vox Pupuli ### Was? ### Wer? ### Zusammenfassung! ] .right-column[ * Vox Pupuli stellt einen Großteil der meist genutzten Module * Perforce hat 162 "öffentliche" Module, Vox Pupuli 194 * Vox Pupuli verwaltet 95% Tools zum testen und veröffentlichen von Modulen * Vox Pupuli verbindet Domain Experts, Entwickler und User * Vox Pupuli ist die Grundlage für den kommerziellen Erfolg von Perforce ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Perforce hat ein kommerzielles Produkt, PE * Puppet ist nur ein Framework. Erfolgreich wird es erst durch eine lebhafte Community und durch Module * Module ermöglichen es Nutzen, schnell und sicher Änderungen auszubringen ohne zu "programmieren" --- class: center, middle, inverse ## November 2024 -
Perforce bricht mit der Community --- .left-column[ ## Perforce ### Was? ] .right-column[ * Perforce baut keine Open Source Pakete mehr für Puppet Agent/Server/DB * Zukünftige Entwicklung soll in privaten Git Repos passieren ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## Perforce ### Was? ] .right-column[ * Perforce baut keine Open Source Pakete mehr für Puppet Agent/Server/DB * Zukünftige Entwicklung soll in privaten Git Repos passieren * Es gibt eine "Developer EULA" um Zugriff auf die Pakete zu bekommen * Die EULA erlaubt die Nutzung der Pakete in "internen CI Systemen" ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Selbst wenn man als open source Freund noch Software von Perforce nutzen möchte, deren Lizenz ermöglicht es mir nicht. --- count: false .left-column[ ## Perforce ### Was? ] .right-column[ * Perforce baut keine Open Source Pakete mehr für Puppet Agent/Server/DB * Zukünftige Entwicklung soll in privaten Git Repos passieren * Es gibt eine "Developer EULA" um Zugriff auf die Pakete zu bekommen * Die EULA erlaubt die Nutzung der Pakete in "internen CI Systemen" * Es ist nicht mehr möglich Puppet Module öffentlich zu entwickeln und mit Perforce Quellen zu testen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- .left-column[ ## Perforce ### Was? ### Wie (nicht)? ] .right-column[  ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? Paketbau bei Perforce * Es gibt ein git repository * Es hat öffentliche Tests * es gibt einen Jenkins. Dieser war bis 2016 öffentlich und jeder konnte gucken was der so macht * Jetzt führt er vielleicht weitere tests aus, weiß man nicht. * irgendwie werden da auch pakete gebaut * was in den paketen drinn ist, und ob es was mit dem eigentlichen git repo zutun hat, weiß keiner * Perforce war nicht interessiert daran die pipelines von jenkins zu github zu migrieren/öffentlich zu machen * PRs wurden ignoriert * wer meint denn so ein setup ist sinnvoll? --- .left-column[ ## Perforce ### Was? ### Wie (nicht)? ] .right-column[ Vox Pupuli Tools, welche von Perforce verkauft werden: * Alle wichtigen [puppet-lint plugins](https://rubygems.org/gems/voxpupuli-puppet-lint-plugins) (PDK) * [FacterDB](https://github.com/voxpupuli/facterdb) (PDK) * [metadata-json-lint](https://github.com/voxpupuli/metadata-json-lint) (PDK) * [json-schema](https://github.com/voxpupuli/json-schema) (PDK) * [rspec-puppet-facts](https://github.com/voxpupuli/rspec-puppet-facts) (PDK) * [puppet-blacksmith](https://github.com/voxpupuli/puppet-blacksmith) (PDK) * [puppet-syntax](https://github.com/voxpupuli/puppet-syntax) (puppet-dev-tools container) * [ra10ke](https://github.com/voxpupuli/ra10ke) (puppet-dev-tools container) * [onceover](https://github.com/voxpupuli/onceover) (puppet-dev-tools container) * [Beaker](https://github.com/voxpupuli/beaker) (Perforce intern genutzt) * [hiera-eyaml](https://github.com/voxpupuli/hiera-eyaml/) (PE und puppet-dev-tools container) ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * das ist der komplette Stack um seine module zu testen. Statische Code analyse mit syntax checks und linting, unit tests, acceptance tests * Wie viel geld oder unterstützung bekommt die community von Perforce? * Wer kennt eins der Tools? PE Nutzer hier? --- .left-column[ ## OpenVox ### Was? ] .right-column[ * Vox Pupuli startet das OpenVoxProject * Neue GitHub Organisation * Macht es später einfacher falls ein Teil des Projekts zur LF oder ähnliches wechseln soll ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- count: false .left-column[ ## OpenVox ### Was? ] .right-column[ * Vox Pupuli startet das OpenVoxProject * Neue GitHub Organisation * Macht es später einfacher falls ein Teil des Projekts zur LF oder ähnliches wechseln soll * OpenVoxProject = Weiterentwicklung der Open Source versionen von Puppet Agent/Server/DB * Vox Pupuli = Puppet Module + Tooling ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? --- .left-column[ ## OpenVox ### Was? ] .right-column[ Weiterentwicklung der Open Source Versionen: * puppet-agent -> openvox-agent * puppetserver -> openvoxserver * puppetdb -> openvoxdb * puppet-string -> openvox-strings ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Das sind drop in replacements. Unsere repos aktivieren und läuft --- .left-column[ ## OpenVox ### Was? ### Wie? ] .right-column[ * In GitHub Workflows gibt es eine Liste an Betriebssystemen * Container pro OS starten, darin openvox-agent bauen * Server/DB werden alle im gleichen Container gebaut * Weiterer Workflow erzeugt virtuelle Machinen, installiert die Pakete und führt Tests aus ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Neue Pakete für Linux bauen: Nur das Betriebssytem in der Liste ergänzen, und es muss einen Container geben * Wir erzeugen virtuelle VMs on demand innerhalb github actions, mit vanilla images der distros. ohne vmware cluster --- count: false .left-column[ ## OpenVox ### Was? ### Wie? ] .right-column[ * In GitHub Workflows gibt es eine Liste an Betriebssystemen * Container pro OS starten, darin openvox-agent bauen * Server/DB werden alle im gleichen Container gebaut * Weiterer Workflow erzeugt virtuelle Machinen, installiert die Pakete und führt Tests aus * Das Setup hat Doku: [github.com/OpenVoxProject/planning/wiki/How-OpenVox-builds-work](https://github.com/OpenVoxProject/planning/wiki/How-OpenVox-builds-work) * Pipelines sind alle öffentlich, man kann Pakete lokal selbst bauen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Wir arbeiten an reproducible builds * man kann PRs aufmachen und leute schauen sich die auch an * Die community hat mehr maintainer als Perforce --- .left-column[ ## OpenVox ### Was? ### Wie? ] .right-column[ * Rocky Linux 10 Release: 11.06.2025 * openvox-agent EL10 Release: 21.02.2025 * OpenVox Time to market: -110 Tage! ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * 110 Tage vor dem offiziellen release, hatten wir schon Pakete * Wie schnell ist Perforce? Deren hauptkunden sind EL. Mit Debian Paketen wäre die statistik noch viel schlechter --- count: false .left-column[ ## OpenVox ### Was? ### Wie? ] .right-column[ * Rocky Linux 10 Release: 11.06.2025 * openvox-agent EL10 Release: 21.02.2025 * OpenVox Time to market: -110 Tage! * Perforce "Puppet Core" EL10 Agents: Datum unbekannt ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? Da fragt man sich ja, was machen die den ganzen Tag? Anderes Beispiel, Debian 12 puppetserver Paket. nach über 1 Jahren kam die aussage, das es überhaupt pakete geben wird. ein halbes jahr später kam es. --- count: false .left-column[ ## OpenVox ### Was? ### Wie? ] .right-column[ * Rocky Linux 10 Release: 11.06.2025 * openvox-agent EL10 Release: 21.02.2025 * OpenVox Time to market: -110 Tage! * Perforce "Puppet Core" EL10 Agents: Datum unbekannt * Debian 12 Release Date: 10.06.2023 * Perforce puppetserver Debian 12 Paket: 22.10.2024 ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? Da fragt man sich ja, was machen die den ganzen Tag? Anderes Beispiel, Debian 12 puppetserver Paket. nach über 1 Jahren kam die aussage, das es überhaupt pakete geben wird. ein halbes jahr später kam es. --- .left-column[ ## OpenVox ### Was? ### Wie? ### Hilfe? ] .right-column[ Wo bekomme ich kommerziellen Support, Trainings, Feature Entwicklung? * [Enterprise Modules B.V., Niederlande](https://www.enterprisemodules.com/) * [Overlook InfraTech, USA](https://overlookinfratech.com/) * [S & S Consulting Group, USA](https://ssconsultinggroup.net/) * [ATIX AG, Deutschland](https://atix.de/en/) * [Xyntion GmbH, Deutschland](https://www.xyntion.consulting/) * [betadots GmbH, Deutschland](https://www.betadots.de/) Mehr Infos: * [voxpupuli.org/openvox/support](https://voxpupuli.org/openvox/support/) ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Was ist denn mit den Firmen, die professionelle Hilfe benötigen? * Wir haben partner! * Wir sind kein hobbyprojekt, welches nächsten Monat wieder stirbt --- .left-column[ ## Vox Pupuli ### Fazit ] .right-column[ * OpenVoxProject ist OpenSource * Es gibt keine CLA ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Perforce hatte eine CLA und kann die Lizenz theoretisch ändern * CLA - Contributor License Agreement --- count: false .left-column[ ## Vox Pupuli ### Fazit ] .right-column[ * OpenVoxProject ist OpenSource * Es gibt keine CLA * OpenVoxProject ist herstellerunabhängig und hat keine kommerziellen Interessen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Das war immer ein Problem mit Perforce. Eine Firma kann alleine entscheiden und muss Geld verdienen. Da gibt es immer überlegungen wie man neue feature verkaufen kann --- count: false .left-column[ ## Vox Pupuli ### Fazit ] .right-column[ * OpenVoxProject ist OpenSource * Es gibt keine CLA * OpenVoxProject ist herstellerunabhängig und hat keine kommerziellen Interessen * Unsere Arbeit und Pipelines sind öffentlich und nachvollziehbar, jeder kann sich einbringen * Oder eine Partnerfirma für Entwicklung bezahlen ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Perforce war sehr gut darin PRs zu ignorieren. Eben weil sie dann immer interne CI Jobs checken mussten * PRs sind jetzt einfacher. und selbst wenn man als große Firma ein fehlendes feature identifiziert und dies nicht selbst fixen kann, kann man nun leute dafür bezahlen * das war bei Perforce schwierig bis einfach unmöglich --- .left-column[ ## Vox Pupuli ### Fazit ### Kontakt ] .right-column[ * IRC: [Libera.Chat/#voxpupuli](https://web.libera.chat/?#voxpupuli) * Mailingliste: [voxpupuli@groups.io](mailto:voxpupuli@groups.io) * Feedback: [tim@bastelfreak.de](mailto:tim@bastelfreak.de) * Slideset und weitere Vorträge:
github.com/bastelfreak/talks
* Support Vox Pupuli via [GitHub sponsors](https://github.com/sponsors/voxpupuli) oder [OpenCollective](https://opencollective.com/vox-pupuli/) ### Vielen Dank für eure Aufmerksamkeit! ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? * Danke betadots fürs sponsoring * wir stellen ein * supported vox pupuli --- count: false .left-column[ ## Vox Pupuli ### Fazit ### Kontakt ### Link Sammlung ] .right-column[ * Unsere Website: [voxpupuli.org/docs/](https://voxpupuli.org/docs/) * CI Setup: [github.com/voxpupuli/gha-puppet](https://github.com/voxpupuli/gha-puppet#puppet-github-actions) * Unit Tests: [github.com/voxpupuli/voxpupuli-test](https://github.com/voxpupuli/voxpupuli-test#voxpupuli-test-gem) * Acceptance Tests: [github.com/voxpupuli/voxpupuli-acceptance](https://github.com/voxpupuli/voxpupuli-acceptance#voxpupuli-acceptance-gem) * Release Tooling: [github.com/voxpupuli/voxpupuli-release](https://github.com/voxpupuli/voxpupuli-release#vox-pupuli-release-gem) * modulesync_config: [github.com/voxpupuli/modulesync_config](https://github.com/voxpupuli/modulesync_config#modulesync-configs) ]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)] ??? ??? CI setup --- count: false .left-column[ ## Vox Pupuli ] .right-column[
]
.footnote[[bastelfreak](https://github.com/bastelfreak) für [Vox Pupuli]((https://voxpupuli.org)]