<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.perl-guilds.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Perl Guilds - Getting Medieval with Perl - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.perl-guilds.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Special:Contributions/Admin"/>
	<updated>2026-09-15T13:44:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=397</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=397"/>
		<updated>2026-09-06T05:11:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Perl Guilds Wiki: Home of the Virtuous Progammer Initiative}}&lt;br /&gt;
&lt;br /&gt;
=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance and independent Perl programmers&#039;&#039;&#039; and help them thrive in their trades. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki. It is the home of the The Virtuous Programmer Initiative.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; border:2px solid #6b4e2e; background:#fffaf0; margin:1em 0; padding:0.4em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:100px; text-align:center; vertical-align:top; padding:0.7em;&amp;quot; | [[File:NewUserLogo.png|88px|link=Portal:Essays about The Virtuous Perl Programmer|alt=The Virtuous Perl Programmer essay series]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top; padding:0.7em 1em;&amp;quot; |&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Featured Series: [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This long-form essay series follows the Perl programmer as craftsman: from the potentially weary journeyman or master seeking renewed work, to the prospective apprentice who has not yet discovered the trade. Its current technical journey develops a complete Windows wxPerl workshop and follows the work from a Perl idea to a graphical application, executable, installer, and supportable product.&lt;br /&gt;
&lt;br /&gt;
The essays apply &#039;&#039;&#039;Prudence&#039;&#039;&#039;, &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, and &#039;&#039;&#039;Good Order&#039;&#039;&#039; to real technical decisions without separating craftsmanship from truth, justice, the dignity of workers, service to users, or the proper use of talents received from God.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Begin the journey:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
# [[The Perl Lazarus Workshop]]&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
God is the Creator and the source of every good gift and talent. The programmer does not create from nothing; he receives intelligence, opportunity, tools, knowledge, and the labor of earlier craftsmen, and is responsible for developing these gifts and ordering them toward truthful service.&lt;br /&gt;
&lt;br /&gt;
Mastery therefore carries obligations. The apprentice, journeyman, master, customer, and user possess the same God-given dignity, while greater skill creates greater duties of justice, humility, patience, stewardship, and care.&lt;br /&gt;
&lt;br /&gt;
The [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer essays]] apply these principles to the daily work of programming: choosing tools, forming apprentices, using AI, respecting licenses, protecting users, earning a just livelihood, and bringing software to completion.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:Essays about The Virtuous Perl Programmer|[[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]]&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals who charge money for Perl-related services, and for those preparing to do so.&#039;&#039;&#039; Perl may be the visible product, the server-side foundation, or the craftsman&#039;s secret weapon.&lt;br /&gt;
&lt;br /&gt;
This is not a celebration of being a careless &amp;quot;jack of all trades.&amp;quot; It is a place for apprentices, journeymen, and masters who wish to cultivate real specialties, serve users well, support their families, and earn a just and sustainable livelihood through useful labor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Featured Technical Journey&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
  ** [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
  ** [[The Perl Lazarus Workshop]]&lt;br /&gt;
  ** [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
  ** &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Complete wxPerl-on-Windows technical reference]]&lt;br /&gt;
* [[:Category:Perl Lazarus Project|Perl Lazarus Project category]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[ServiceProviders|Perl service providers and craftsmen]]&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Portal:Software Development Tools|Software Development Tools]]&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
* [[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv — join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://strawberryperl.com/ Strawberry Perl] — native Perl and build environment for Windows&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] — written in Python, but can output Perl&lt;br /&gt;
* [https://www.msys2.org/ MSYS2] — Unix-like editing, Git, SSH, and shell environment for Windows&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] — professional Windows installer builder with reasonable commercial licensing terms&lt;br /&gt;
* [[Perl and wxWidgets RAD on Windows|History of Perl and wxWidgets RAD tools on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [[GUI ideas for use with wxGlade]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
* [https://perlclientdirectory.com/ Perl Client Directory]&lt;br /&gt;
* Desktop wxPerl clients may complement Perl web applications, APIs, databases, and hosted processing services.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Payment Processing]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
* Application sales, site licenses, paid customization, migration, support, maintenance, training, hosting, and consulting&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Projects using Perl]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)|Perl Powered Programs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads and Source Code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild The Perl Cottage Guild on GitHub]&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer]&lt;br /&gt;
* [[:Category:Code|Code on this wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] — test forum to see if any activity is drawn to it&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues Wiki requests and issue tracker]&lt;br /&gt;
* [[ServiceProviders|Service-provider listings]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books, Magazines, and Long-Form Writing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer essays]]&lt;br /&gt;
* The essay series is being developed incrementally as a future book-length treatment of virtuous craftsmanship and marketable wxPerl application development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ — curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net — track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:Category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Magnifica_Humanitas:_A_Plain-Language_Overview&amp;diff=396</id>
		<title>Magnifica Humanitas: A Plain-Language Overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Magnifica_Humanitas:_A_Plain-Language_Overview&amp;diff=396"/>
		<updated>2026-09-06T05:08:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Read the original */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:&#039;&#039;Magnifica Humanitas&#039;&#039;: A Plain-Language Overview}}&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;Magnifica Humanitas&#039;&#039;: A Plain-Language Overview =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pope Leo XIV&#039;s 2026 encyclical &#039;&#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;&#039; is a large document about a simple question: as human beings acquire greater technological power, what must we protect so that our progress remains genuinely human?&#039;&#039;&amp;lt;ref name=&amp;quot;MH&amp;quot;&amp;gt;Leo XIV, [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;], encyclical letter, 15 May 2026.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For readers who do not intend to work through the entire encyclical, this page offers a practical overview of its main ideas.&lt;br /&gt;
&lt;br /&gt;
The shortest possible summary is this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technology is good when it serves human beings. Human beings must never be reduced to servants, inputs, data points, or obstacles in the service of technology.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That principle reaches far beyond artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; is about AI, but it is also about work, truth, freedom, economic power, human dignity, families, education, community, peace, responsibility, and the purpose of technological progress.&lt;br /&gt;
&lt;br /&gt;
== Why did Leo XIV write it? ==&lt;br /&gt;
&lt;br /&gt;
The title &#039;&#039;Magnifica Humanitas&#039;&#039; may be translated roughly as &#039;&#039;&#039;the grandeur of humanity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Leo XIV begins from the conviction that humanity is created by God and possesses a dignity which technological change cannot confer and cannot remove.&lt;br /&gt;
&lt;br /&gt;
The immediate setting is the extraordinary growth of artificial intelligence, robotics, digital platforms, biotechnology, and other forms of technological power. Leo XIV compares the present moment to the &#039;&#039;res novae&#039;&#039; — the “new things” — that confronted Pope Leo XIII during the Industrial Revolution.&lt;br /&gt;
&lt;br /&gt;
Leo XIII responded to the social upheavals of industrialization with &#039;&#039;Rerum Novarum&#039;&#039; in 1891.&lt;br /&gt;
&lt;br /&gt;
Leo XIV argues that our generation faces another set of “new things.” We therefore have to ask again:&lt;br /&gt;
&lt;br /&gt;
* What is technology for?&lt;br /&gt;
* Who benefits from it?&lt;br /&gt;
* Who controls it?&lt;br /&gt;
* Who bears responsibility for its consequences?&lt;br /&gt;
* What happens to workers?&lt;br /&gt;
* What happens to families?&lt;br /&gt;
* What happens to truth?&lt;br /&gt;
* What happens to the poor and powerless?&lt;br /&gt;
* What happens to human freedom?&lt;br /&gt;
* And, ultimately, does technological progress make human life more fully human?&lt;br /&gt;
&lt;br /&gt;
The encyclical does &#039;&#039;&#039;not&#039;&#039;&#039; argue that technology is inherently bad. Leo explicitly describes technology as part of human history and recognizes that technological development has greatly improved human life.&amp;lt;ref name=&amp;quot;MH&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem arises when the possession of technological power is confused with wisdom about how that power should be used.&lt;br /&gt;
&lt;br /&gt;
== The two construction projects ==&lt;br /&gt;
&lt;br /&gt;
One of the easiest ways to understand the entire encyclical is through two biblical images Leo uses repeatedly.&lt;br /&gt;
&lt;br /&gt;
The first is the &#039;&#039;&#039;Tower of Babel&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Babel represents a great human project built around power, domination, pride, and the desire to overcome every limit. It is technically impressive, but its apparent greatness ultimately produces division.&lt;br /&gt;
&lt;br /&gt;
The second is the &#039;&#039;&#039;rebuilding of Jerusalem under Nehemiah&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Jerusalem is rebuilt piece by piece through shared responsibility. Different people contribute to a common work. The result is not simply a monument to power, but the restoration of a community.&lt;br /&gt;
&lt;br /&gt;
Leo effectively asks us:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Which kind of world are we building?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An enormously powerful technological civilization can still be a Babel.&lt;br /&gt;
&lt;br /&gt;
A technically less spectacular society may be far more advanced in the things that finally matter if its institutions, technologies, and economy allow people to flourish together.&lt;br /&gt;
&lt;br /&gt;
== Human dignity does not come from productivity ==&lt;br /&gt;
&lt;br /&gt;
One of the most important claims in &#039;&#039;Magnifica Humanitas&#039;&#039; is that the value of a human person does not depend upon what that person can produce.&lt;br /&gt;
&lt;br /&gt;
A human being does not become valuable because he is intelligent, efficient, employable, wealthy, technically skilled, physically healthy, or economically productive.&lt;br /&gt;
&lt;br /&gt;
Human dignity is more fundamental than any of those things.&lt;br /&gt;
&lt;br /&gt;
Leo describes this deepest dignity as belonging to every person simply because that person exists, has been created and loved by God, and possesses a human nature which cannot be reduced to utility.&amp;lt;ref name=&amp;quot;MHDignity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 51–53, on the intrinsic and ontological dignity of every human person.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has enormous implications for a technological society.&lt;br /&gt;
&lt;br /&gt;
If efficiency becomes the highest value, then people begin to be judged according to their usefulness.&lt;br /&gt;
&lt;br /&gt;
The elderly may appear inefficient.&lt;br /&gt;
&lt;br /&gt;
The disabled may appear expensive.&lt;br /&gt;
&lt;br /&gt;
Children may appear economically unproductive.&lt;br /&gt;
&lt;br /&gt;
Workers may appear replaceable.&lt;br /&gt;
&lt;br /&gt;
People whose skills are no longer fashionable may appear obsolete.&lt;br /&gt;
&lt;br /&gt;
But a person is not obsolete.&lt;br /&gt;
&lt;br /&gt;
A human being is not a machine whose value can be calculated from output.&lt;br /&gt;
&lt;br /&gt;
== AI is a tool, not a person ==&lt;br /&gt;
&lt;br /&gt;
Leo XIV makes a clear distinction between artificial intelligence and human intelligence.&lt;br /&gt;
&lt;br /&gt;
AI systems can imitate certain operations associated with human intelligence. They may process enormous quantities of information, recognize patterns, generate language, solve particular problems, and perform some tasks faster or more accurately than a human being.&lt;br /&gt;
&lt;br /&gt;
But this does not make them human persons.&lt;br /&gt;
&lt;br /&gt;
AI does not live a human life.&lt;br /&gt;
&lt;br /&gt;
It does not possess a body in the human sense.&lt;br /&gt;
&lt;br /&gt;
It does not experience childhood.&lt;br /&gt;
&lt;br /&gt;
It does not suffer, love, form friendships, raise children, grow old, repent, hope, worship, or assume moral responsibility.&lt;br /&gt;
&lt;br /&gt;
It does not experience work from within.&lt;br /&gt;
&lt;br /&gt;
It does not possess human conscience and freedom merely because its output resembles intelligent conversation.&amp;lt;ref name=&amp;quot;MHAI&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 97–103, on artificial intelligence, human intelligence, responsibility and governance.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For that reason, AI should not be treated as though it were a new kind of human being.&lt;br /&gt;
&lt;br /&gt;
It is an extraordinarily powerful human-made tool.&lt;br /&gt;
&lt;br /&gt;
That distinction matters because responsibility cannot simply be transferred from people to machines.&lt;br /&gt;
&lt;br /&gt;
== Somebody remains responsible ==&lt;br /&gt;
&lt;br /&gt;
A recurrent temptation with complicated technology is to say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“The computer decided.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo rejects that escape.&lt;br /&gt;
&lt;br /&gt;
When an automated system affects someone&#039;s employment, reputation, credit, opportunities, access to services, safety, or freedom, a human moral responsibility remains.&lt;br /&gt;
&lt;br /&gt;
An algorithm cannot absolve the people and institutions that designed, selected, deployed, or relied upon it.&lt;br /&gt;
&lt;br /&gt;
The greater the consequences, the greater the need for accountability, transparency, and meaningful human judgment.&amp;lt;ref name=&amp;quot;MHAI&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is particularly important when a system appears neutral.&lt;br /&gt;
&lt;br /&gt;
Algorithms are created, trained, selected, configured, and deployed by human beings and institutions. They may reproduce assumptions, priorities, errors, and biases even when nobody explicitly programmed an instruction to discriminate.&lt;br /&gt;
&lt;br /&gt;
“AI said so” is therefore not an adequate moral explanation.&lt;br /&gt;
&lt;br /&gt;
== A special responsibility belongs to developers ==&lt;br /&gt;
&lt;br /&gt;
One part of the encyclical is unusually direct for those of us who write software.&lt;br /&gt;
&lt;br /&gt;
Leo XIV makes a specific appeal to developers of artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
Technological creation can be understood as one expression of human creativity, but every design decision carries assumptions about human beings and about the kind of behavior a system should encourage.&lt;br /&gt;
&lt;br /&gt;
Developers therefore carry a particular ethical responsibility.&lt;br /&gt;
&lt;br /&gt;
Transparency matters.&lt;br /&gt;
&lt;br /&gt;
Consequences matter.&lt;br /&gt;
&lt;br /&gt;
The communities affected by software matter.&lt;br /&gt;
&lt;br /&gt;
The purpose toward which the technology is being directed matters.&amp;lt;ref name=&amp;quot;MHDevelopers&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, no. 111, addressing developers of artificial intelligence and their ethical and spiritual responsibilities.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The programmer is not merely a pair of hands implementing somebody else&#039;s specification.&lt;br /&gt;
&lt;br /&gt;
Technical craftsmanship includes judgment.&lt;br /&gt;
&lt;br /&gt;
== Work is more than income ==&lt;br /&gt;
&lt;br /&gt;
This is one of the most important parts of &#039;&#039;Magnifica Humanitas&#039;&#039; for the &#039;&#039;&#039;Virtuous Programmer Initiative&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Leo XIV strongly rejects a view of work in which the worker is merely another component in a production system.&lt;br /&gt;
&lt;br /&gt;
Work provides income, but its importance is much greater.&lt;br /&gt;
&lt;br /&gt;
Through work people develop abilities, exercise responsibility, cooperate with others, support families, contribute to society, discover aspects of vocation, and participate in the creation and maintenance of the human world.&lt;br /&gt;
&lt;br /&gt;
For this reason, work itself has dignity.&amp;lt;ref name=&amp;quot;MHWork&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 149–169, on the dignity and value of work during digital transformation.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This changes the question we should ask about automation.&lt;br /&gt;
&lt;br /&gt;
The question cannot simply be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“How many workers can this technology eliminate?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A better question is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“How can this technology help human beings perform good work better?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo warns specifically against a situation in which workers must increasingly adapt themselves to the speed and demands of machines instead of machines being designed to support workers.&amp;lt;ref name=&amp;quot;MHWork&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is an extremely important distinction.&lt;br /&gt;
&lt;br /&gt;
Technology should be adapted to humanity.&lt;br /&gt;
&lt;br /&gt;
Humanity should not be redesigned to fit technology.&lt;br /&gt;
&lt;br /&gt;
== Losing a job is not merely losing a paycheck ==&lt;br /&gt;
&lt;br /&gt;
Because work has a social and personal dimension, widespread technological unemployment cannot be treated merely as an accounting problem.&lt;br /&gt;
&lt;br /&gt;
The loss of work can also mean loss of:&lt;br /&gt;
&lt;br /&gt;
* responsibility;&lt;br /&gt;
* professional identity;&lt;br /&gt;
* stability;&lt;br /&gt;
* relationships;&lt;br /&gt;
* opportunities for young people;&lt;br /&gt;
* the ability to form and support families;&lt;br /&gt;
* confidence in the future;&lt;br /&gt;
* and participation in the life of a community.&lt;br /&gt;
&lt;br /&gt;
Leo therefore emphasizes education, retraining, opportunities for meaningful employment, stability for families, and a proper balance among work, leisure, and rest.&amp;lt;ref name=&amp;quot;MHWork&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A healthy economy exists for human beings.&lt;br /&gt;
&lt;br /&gt;
Human beings do not exist for the economy.&lt;br /&gt;
&lt;br /&gt;
== Subsidiarity: do not take away what smaller communities can do ==&lt;br /&gt;
&lt;br /&gt;
Another major theme of the encyclical is &#039;&#039;&#039;subsidiarity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The idea is simple.&lt;br /&gt;
&lt;br /&gt;
Responsibilities should ordinarily remain with the smallest or most local person, family, community, organization, or institution capable of carrying them out competently.&lt;br /&gt;
&lt;br /&gt;
Larger institutions should assist smaller ones when necessary.&lt;br /&gt;
&lt;br /&gt;
They should not unnecessarily absorb their responsibilities.&lt;br /&gt;
&lt;br /&gt;
A higher authority therefore exists partly to &#039;&#039;&#039;support&#039;&#039;&#039; the ability of smaller communities to act, not simply to replace them.&amp;lt;ref name=&amp;quot;MHSubsidiarity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 68–72, on the principle of subsidiarity and its application to digital power.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This becomes especially interesting in the digital world.&lt;br /&gt;
&lt;br /&gt;
Today, enormous technology companies and platforms may exercise forms of practical power that were once associated primarily with governments.&lt;br /&gt;
&lt;br /&gt;
They can determine:&lt;br /&gt;
&lt;br /&gt;
* who is visible;&lt;br /&gt;
* who can participate;&lt;br /&gt;
* which software may run;&lt;br /&gt;
* who has access to data;&lt;br /&gt;
* which businesses reach customers;&lt;br /&gt;
* what rules govern communication;&lt;br /&gt;
* and what opportunities exist within entire digital ecosystems.&lt;br /&gt;
&lt;br /&gt;
Leo argues that such power should not become opaque and unilateral.&lt;br /&gt;
&lt;br /&gt;
People and smaller institutions need meaningful opportunities to participate, understand decisions, seek recourse, and retain genuine freedom of action.&amp;lt;ref name=&amp;quot;MHSubsidiarity&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsidiarity needs solidarity ==&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not mean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Everyone is on his own.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo pairs it with &#039;&#039;&#039;solidarity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Solidarity means recognizing that our good is connected with the good of other people.&lt;br /&gt;
&lt;br /&gt;
The strong have obligations toward the weak.&lt;br /&gt;
&lt;br /&gt;
Communities have obligations toward their members.&lt;br /&gt;
&lt;br /&gt;
Individuals have obligations toward their communities.&lt;br /&gt;
&lt;br /&gt;
Nations and institutions have responsibilities that extend beyond narrow self-interest.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity without solidarity can become selfishness.&lt;br /&gt;
&lt;br /&gt;
Solidarity without subsidiarity can become paternalism which deprives people of responsibility and initiative.&amp;lt;ref name=&amp;quot;MHSolidarity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 73–75, on solidarity and its relationship to subsidiarity.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two principles belong together.&lt;br /&gt;
&lt;br /&gt;
Help people.&lt;br /&gt;
&lt;br /&gt;
Do not unnecessarily take over their lives.&lt;br /&gt;
&lt;br /&gt;
== The common good is more than everyone&#039;s private interests added together ==&lt;br /&gt;
&lt;br /&gt;
Another recurring expression is the &#039;&#039;&#039;common good&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This does not simply mean finding a compromise among competing individual interests.&lt;br /&gt;
&lt;br /&gt;
The common good concerns the social conditions in which people and communities are actually able to flourish.&amp;lt;ref name=&amp;quot;MHCommonGood&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 59–64, on the principle of the common good.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A society may generate extraordinary wealth while still failing the common good if that prosperity requires large numbers of people to become disposable, powerless, isolated, or unable to participate meaningfully in society.&lt;br /&gt;
&lt;br /&gt;
Technology must therefore be judged partly by its social consequences.&lt;br /&gt;
&lt;br /&gt;
Who gains power?&lt;br /&gt;
&lt;br /&gt;
Who loses it?&lt;br /&gt;
&lt;br /&gt;
Who gains opportunities?&lt;br /&gt;
&lt;br /&gt;
Who becomes dependent?&lt;br /&gt;
&lt;br /&gt;
Who controls the infrastructure?&lt;br /&gt;
&lt;br /&gt;
Who owns the knowledge?&lt;br /&gt;
&lt;br /&gt;
Who may participate?&lt;br /&gt;
&lt;br /&gt;
Who is excluded?&lt;br /&gt;
&lt;br /&gt;
These are not questions outside technology.&lt;br /&gt;
&lt;br /&gt;
Once technology changes the conditions of human life, they become technological questions as well.&lt;br /&gt;
&lt;br /&gt;
== Information and truth matter ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; also treats truth as a common good.&lt;br /&gt;
&lt;br /&gt;
Digital technology can make knowledge available with extraordinary speed, but it can also multiply falsehood, manipulation, synthetic media, addictive communication, and environments in which people no longer know whom to trust.&lt;br /&gt;
&lt;br /&gt;
A society cannot function indefinitely without some shared ability to establish facts.&lt;br /&gt;
&lt;br /&gt;
Technology should therefore strengthen rather than deliberately undermine people&#039;s ability to perceive reality, exercise judgment, and communicate truthfully.&lt;br /&gt;
&lt;br /&gt;
Human attention itself should not be regarded merely as another commodity to capture and sell.&lt;br /&gt;
&lt;br /&gt;
== Freedom can be lost gradually ==&lt;br /&gt;
&lt;br /&gt;
Leo also warns about dependency.&lt;br /&gt;
&lt;br /&gt;
People can surrender meaningful freedom without anybody formally taking it away.&lt;br /&gt;
&lt;br /&gt;
A person&#039;s choices may increasingly be shaped by:&lt;br /&gt;
&lt;br /&gt;
* addictive systems;&lt;br /&gt;
* recommendation algorithms;&lt;br /&gt;
* surveillance;&lt;br /&gt;
* commercial profiling;&lt;br /&gt;
* social pressure;&lt;br /&gt;
* technological dependence;&lt;br /&gt;
* monopolized platforms;&lt;br /&gt;
* and services which have become difficult to live without.&lt;br /&gt;
&lt;br /&gt;
Freedom therefore requires more than the existence of a button labeled “I Agree.”&lt;br /&gt;
&lt;br /&gt;
It requires conditions in which people remain capable of understanding, choosing, refusing, participating, and acting responsibly.&lt;br /&gt;
&lt;br /&gt;
== The problem is not AI versus humanity ==&lt;br /&gt;
&lt;br /&gt;
One of the most useful things about &#039;&#039;Magnifica Humanitas&#039;&#039; is that it avoids two simplistic positions.&lt;br /&gt;
&lt;br /&gt;
It does not say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“AI will save us.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And it does not say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Technology is evil.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real choice is between &#039;&#039;&#039;different ways of developing and using technology&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We can build technology around power, domination, control, consumption, and efficiency as ends in themselves.&lt;br /&gt;
&lt;br /&gt;
Or we can build technology around human dignity, justice, participation, responsibility, work, family, truth, community, and the common good.&lt;br /&gt;
&lt;br /&gt;
That is the contrast between Babel and Jerusalem.&lt;br /&gt;
&lt;br /&gt;
== Why programmers should care ==&lt;br /&gt;
&lt;br /&gt;
For programmers, this encyclical is unusually relevant.&lt;br /&gt;
&lt;br /&gt;
Software increasingly determines how other people:&lt;br /&gt;
&lt;br /&gt;
* communicate;&lt;br /&gt;
* work;&lt;br /&gt;
* obtain information;&lt;br /&gt;
* receive services;&lt;br /&gt;
* conduct business;&lt;br /&gt;
* learn;&lt;br /&gt;
* spend money;&lt;br /&gt;
* exercise authority;&lt;br /&gt;
* and understand the world.&lt;br /&gt;
&lt;br /&gt;
That gives programmers genuine power.&lt;br /&gt;
&lt;br /&gt;
It also gives us genuine responsibilities.&lt;br /&gt;
&lt;br /&gt;
The programmer therefore cannot finally judge a program merely by asking:&lt;br /&gt;
&lt;br /&gt;
* Does it compile?&lt;br /&gt;
* Does it pass the tests?&lt;br /&gt;
* Is it fast?&lt;br /&gt;
* Does it scale?&lt;br /&gt;
* Is the architecture elegant?&lt;br /&gt;
* Can it be automated?&lt;br /&gt;
* Can AI generate it?&lt;br /&gt;
* Will somebody pay for it?&lt;br /&gt;
&lt;br /&gt;
Those are legitimate questions.&lt;br /&gt;
&lt;br /&gt;
They simply are not the final questions.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer must eventually ask:&lt;br /&gt;
&lt;br /&gt;
* Is it true?&lt;br /&gt;
* Is it useful?&lt;br /&gt;
* Whom does it serve?&lt;br /&gt;
* Whom might it harm?&lt;br /&gt;
* Does it respect the user?&lt;br /&gt;
* Does it respect the worker?&lt;br /&gt;
* Does it leave meaningful human responsibility somewhere?&lt;br /&gt;
* Does it enlarge human capacity or merely create dependence?&lt;br /&gt;
* Does it allow smaller communities and individuals to act?&lt;br /&gt;
* Does it serve a genuinely good end?&lt;br /&gt;
&lt;br /&gt;
This is where &#039;&#039;Magnifica Humanitas&#039;&#039; intersects directly with [[Open Sourcing the Virtues of a Perl Programmer]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical Wisdom&#039;&#039;&#039; asks what our technical power ought to be used for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spiritedness&#039;&#039;&#039; gives us the energy to confront systems that are broken, unjust, dehumanizing, or simply poor servants of their users.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Good Order&#039;&#039;&#039; asks us to build technologies, projects, businesses, and communities in forms that human beings can inhabit rather than merely endure.&lt;br /&gt;
&lt;br /&gt;
And &#039;&#039;&#039;Diligence, Patience, and Humility&#039;&#039;&#039; remind us that technical brilliance is not the same thing as wisdom.&lt;br /&gt;
&lt;br /&gt;
== The programmer is not the machine ==&lt;br /&gt;
&lt;br /&gt;
One of the most important consequences of the encyclical for the current AI age can be stated very simply:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Your value as a programmer is not the sum of the code you produce.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A faster machine does not diminish your dignity.&lt;br /&gt;
&lt;br /&gt;
An AI system that generates a thousand lines of code in seconds does not become a better human craftsman than the programmer who needs an afternoon to understand a difficult problem.&lt;br /&gt;
&lt;br /&gt;
The human programmer can know why the work is being done.&lt;br /&gt;
&lt;br /&gt;
He can accept responsibility for it.&lt;br /&gt;
&lt;br /&gt;
He can care about the customer.&lt;br /&gt;
&lt;br /&gt;
He can recognize that a technically possible action should not be performed.&lt;br /&gt;
&lt;br /&gt;
He can teach an apprentice.&lt;br /&gt;
&lt;br /&gt;
He can support a family through his work.&lt;br /&gt;
&lt;br /&gt;
He can make promises and keep them.&lt;br /&gt;
&lt;br /&gt;
He can repent when he has acted wrongly.&lt;br /&gt;
&lt;br /&gt;
He can serve another human being deliberately.&lt;br /&gt;
&lt;br /&gt;
These are not incidental limitations surrounding the “real” activity of computation.&lt;br /&gt;
&lt;br /&gt;
They belong to what makes human work human.&lt;br /&gt;
&lt;br /&gt;
== The whole document in ten points ==&lt;br /&gt;
&lt;br /&gt;
For the reader who remembers nothing else, &#039;&#039;Magnifica Humanitas&#039;&#039; can be reduced — somewhat unfairly, but usefully — to ten practical ideas:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Every human being has dignity that does not depend on intelligence, productivity, wealth, health, or usefulness.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Technology is a human tool and can accomplish enormous good.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;More technological power does not automatically mean more wisdom or more human progress.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Artificial intelligence is not human intelligence and must not replace human moral responsibility.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Developers and institutions remain responsible for what their systems do to people.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work is part of human flourishing, not merely a cost of production to be eliminated.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Smaller communities, families, workers, and individuals should retain real responsibility and freedom whenever possible.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Solidarity requires us to care about people who might otherwise be excluded from technological progress.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Truth, freedom, family, community, justice, and the common good are legitimate standards by which technological progress should be judged.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;The ultimate question is not simply what we can build, but what kind of human world we are building.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Babel or Jerusalem? ==&lt;br /&gt;
&lt;br /&gt;
That final question may be the easiest way to remember the encyclical.&lt;br /&gt;
&lt;br /&gt;
Human ingenuity is real.&lt;br /&gt;
&lt;br /&gt;
Technological progress is real.&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence is powerful.&lt;br /&gt;
&lt;br /&gt;
Economic productivity matters.&lt;br /&gt;
&lt;br /&gt;
Scientific discovery is good.&lt;br /&gt;
&lt;br /&gt;
None of these things is God.&lt;br /&gt;
&lt;br /&gt;
None of them defines the worth of a human person.&lt;br /&gt;
&lt;br /&gt;
None of them supplies its own moral purpose.&lt;br /&gt;
&lt;br /&gt;
We therefore remain responsible for deciding what to build.&lt;br /&gt;
&lt;br /&gt;
The construction site is already open.&lt;br /&gt;
&lt;br /&gt;
The tools are already in our hands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; asks us to decide whether we are building Babel or rebuilding Jerusalem.&lt;br /&gt;
&lt;br /&gt;
== Perl Guilds, the Virtuous Programmer Initiative, and &#039;&#039;Magnifica Humanitas&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
The work being undertaken through &#039;&#039;&#039;Perl-Guilds.net&#039;&#039;&#039; and the &#039;&#039;&#039;Virtuous Programmer Initiative&#039;&#039;&#039; was not created as a commentary on &#039;&#039;Magnifica Humanitas&#039;&#039;. Much of its central framework was already being developed independently: the recovery of the programmer&#039;s virtues as &#039;&#039;&#039;Practical Wisdom&#039;&#039;&#039;, &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, and &#039;&#039;&#039;Good Order&#039;&#039;&#039;; the complementary importance of &#039;&#039;&#039;Diligence&#039;&#039;&#039;, &#039;&#039;&#039;Patience&#039;&#039;&#039;, and &#039;&#039;&#039;Humility&#039;&#039;&#039;; the treatment of programming as a craft; the dignity of the worker; the responsibilities of masters toward apprentices; the importance of maintainable work; and the desire to help programmers earn a sustainable livelihood through useful service.&lt;br /&gt;
&lt;br /&gt;
The appearance of &#039;&#039;Magnifica Humanitas&#039;&#039; therefore does not require the Virtuous Programmer Initiative to become something fundamentally different.&lt;br /&gt;
&lt;br /&gt;
It provides a larger contemporary framework within which much of this work already makes sense.&lt;br /&gt;
&lt;br /&gt;
The alignment can be seen in several places.&lt;br /&gt;
&lt;br /&gt;
=== The programmer is a person before he is a producer ===&lt;br /&gt;
&lt;br /&gt;
Perl Guilds begins from a view of the programmer as a &#039;&#039;&#039;craftsman&#039;&#039;&#039;, not merely as a unit of technical output.&lt;br /&gt;
&lt;br /&gt;
An apprentice is not less human than a master.&lt;br /&gt;
&lt;br /&gt;
A programmer whose skills have temporarily fallen out of fashion is not obsolete.&lt;br /&gt;
&lt;br /&gt;
A maintainer who spends days understanding an old system has not necessarily accomplished less than somebody who produces thousands of lines of new code.&lt;br /&gt;
&lt;br /&gt;
A programmer supporting a family through ordinary consulting work may be doing something every bit as worthy as a programmer associated with a fashionable technological breakthrough.&lt;br /&gt;
&lt;br /&gt;
This is closely aligned with the anthropology expressed in &#039;&#039;Magnifica Humanitas&#039;&#039;: human dignity is not earned through productivity, technical capability, intelligence, market value, or social prestige.&lt;br /&gt;
&lt;br /&gt;
That principle becomes particularly important in an age of artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
If a machine can generate code more quickly than a human being, it does not follow that the human programmer has become less valuable.&lt;br /&gt;
&lt;br /&gt;
If automation reduces the amount of labor required for a task, the person whose labor was previously required does not thereby become a human surplus.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer Initiative therefore resists defining a programmer primarily by output.&lt;br /&gt;
&lt;br /&gt;
The programmer is a person who can judge, choose, promise, teach, serve, accept responsibility, develop virtue, enter relationships, and direct technical powers toward good or bad ends.&lt;br /&gt;
&lt;br /&gt;
Those are not secondary properties surrounding the supposedly more important fact that he writes code.&lt;br /&gt;
&lt;br /&gt;
They are central to what human craftsmanship is.&lt;br /&gt;
&lt;br /&gt;
=== Technology exists for people ===&lt;br /&gt;
&lt;br /&gt;
The Perl community has always been deeply concerned with tools.&lt;br /&gt;
&lt;br /&gt;
Perl itself is a tool.&lt;br /&gt;
&lt;br /&gt;
CPAN is an enormous collection of tools.&lt;br /&gt;
&lt;br /&gt;
Compilers, editors, test frameworks, build systems, package managers, databases, web frameworks, GUI libraries, source-control systems, cloud services, and artificial intelligence all extend what programmers can accomplish.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer Initiative does not reject these tools.&lt;br /&gt;
&lt;br /&gt;
Neither does &#039;&#039;Magnifica Humanitas&#039;&#039; reject technological development.&lt;br /&gt;
&lt;br /&gt;
The important question is one of &#039;&#039;&#039;order&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The tool must remain ordered toward the good of the person.&lt;br /&gt;
&lt;br /&gt;
This is directly connected with the virtue we call &#039;&#039;&#039;Good Order&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Good Order is not merely tidy formatting or architectural neatness. It asks whether relationships among tools, people, institutions, responsibilities, and ends have been arranged properly.&lt;br /&gt;
&lt;br /&gt;
A build system should serve the programmer.&lt;br /&gt;
&lt;br /&gt;
An application should serve the user.&lt;br /&gt;
&lt;br /&gt;
Automation should serve human work.&lt;br /&gt;
&lt;br /&gt;
An institution should serve the community for which it exists.&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence should assist human judgment rather than provide an excuse to abandon judgment.&lt;br /&gt;
&lt;br /&gt;
A business should earn money by providing something of genuine value rather than treating users as raw material.&lt;br /&gt;
&lt;br /&gt;
When those relationships are reversed, technological order becomes disorder even if the underlying machinery is technically impressive.&lt;br /&gt;
&lt;br /&gt;
=== Practical Wisdom asks what the technology is for ===&lt;br /&gt;
&lt;br /&gt;
The first of the proposed Perl virtues, &#039;&#039;&#039;Practical Wisdom or Prudence&#039;&#039;&#039;, has a particularly strong connection with the technological concerns raised in &#039;&#039;Magnifica Humanitas&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Prudence does not simply ask:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Can this be built?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also asks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Should it be built this way, for these people, under these conditions, toward this end?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is especially important in software because programmers routinely encounter technically interesting possibilities which may not deserve implementation.&lt;br /&gt;
&lt;br /&gt;
A programmer can automate a process that ought to remain under human judgment.&lt;br /&gt;
&lt;br /&gt;
A business can collect data merely because collection is technically possible.&lt;br /&gt;
&lt;br /&gt;
A developer can introduce an artificial-intelligence system into a workflow without asking whether doing so makes the people involved more capable or merely more dependent.&lt;br /&gt;
&lt;br /&gt;
A maintainer can rewrite a stable system because the new design is intellectually appealing even though users need reliability more than novelty.&lt;br /&gt;
&lt;br /&gt;
Practical Wisdom requires attention to the real problem, the real user, the likely consequences, and the actual good being pursued.&lt;br /&gt;
&lt;br /&gt;
That is why the Virtuous Programmer Initiative treats judgment as more important than cleverness.&lt;br /&gt;
&lt;br /&gt;
=== Spiritedness gives us the courage to repair what is wrong ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spiritedness&#039;&#039;&#039; is the energy which makes a programmer care that something is broken, neglected, unjust, dangerous, wasteful, hostile to users, or needlessly difficult.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer is not indifferent.&lt;br /&gt;
&lt;br /&gt;
He may become angry when a system wastes people&#039;s time.&lt;br /&gt;
&lt;br /&gt;
He may be dissatisfied when a project excludes newcomers unnecessarily.&lt;br /&gt;
&lt;br /&gt;
He may care deeply when software treats users deceptively.&lt;br /&gt;
&lt;br /&gt;
He may object when technical workers are expected to carry impossible workloads while being treated as interchangeable parts.&lt;br /&gt;
&lt;br /&gt;
He may become frustrated when institutions place procedure above the people the procedure was intended to serve.&lt;br /&gt;
&lt;br /&gt;
Properly ordered, this energy becomes the willingness to repair.&lt;br /&gt;
&lt;br /&gt;
This also corresponds to the concern in &#039;&#039;Magnifica Humanitas&#039;&#039; that technological development be actively directed toward human flourishing rather than simply allowed to follow whatever incentives happen to dominate the market.&lt;br /&gt;
&lt;br /&gt;
The opposite of impatience is not apathy.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer should care enough to improve what is broken, but should do so with Patience, justice, and respect for other people.&lt;br /&gt;
&lt;br /&gt;
=== Good Order means building things others can inhabit ===&lt;br /&gt;
&lt;br /&gt;
A well-ordered program can be inherited.&lt;br /&gt;
&lt;br /&gt;
A well-ordered project can survive the departure of its original author.&lt;br /&gt;
&lt;br /&gt;
A well-ordered community can welcome apprentices without depending upon secret knowledge.&lt;br /&gt;
&lt;br /&gt;
A well-ordered business can provide value to customers while supporting the people who perform the work.&lt;br /&gt;
&lt;br /&gt;
A well-ordered technological system leaves meaningful responsibility with human beings.&lt;br /&gt;
&lt;br /&gt;
This is why maintainability, documentation, testing, clear interfaces, predictable releases, licensing, source control, and responsible governance are moral questions as well as technical ones.&lt;br /&gt;
&lt;br /&gt;
They concern what we leave for other people.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer Initiative therefore treats &#039;&#039;&#039;Good Order&#039;&#039;&#039; as stewardship.&lt;br /&gt;
&lt;br /&gt;
A master programmer should leave behind more than clever code.&lt;br /&gt;
&lt;br /&gt;
He should leave something another person can understand, maintain, repair, and perhaps improve.&lt;br /&gt;
&lt;br /&gt;
That is closely related to the concern in &#039;&#039;Magnifica Humanitas&#039;&#039; for social conditions in which human beings retain agency, responsibility, participation, and freedom.&lt;br /&gt;
&lt;br /&gt;
=== Subsidiarity and the independent craftsman ===&lt;br /&gt;
&lt;br /&gt;
The idea of &#039;&#039;&#039;subsidiarity&#039;&#039;&#039; has particular importance for Perl Guilds.&lt;br /&gt;
&lt;br /&gt;
Perl-Guilds.net exists in part to encourage independent programmers, small consultancies, specialists, maintainers, and other craftsmen who may work outside large technological institutions.&lt;br /&gt;
&lt;br /&gt;
The principle of subsidiarity suggests that larger structures should support smaller actors when support is needed, but should not unnecessarily absorb work which individuals, families, local communities, small businesses, or voluntary associations can perform competently themselves.&lt;br /&gt;
&lt;br /&gt;
This has a direct technological application.&lt;br /&gt;
&lt;br /&gt;
Not every useful application needs to become a centralized cloud platform.&lt;br /&gt;
&lt;br /&gt;
Not every service needs to require a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
Not every piece of data needs to be transferred to a large remote provider.&lt;br /&gt;
&lt;br /&gt;
Not every programmer needs to become an employee of an enormous technology company in order to perform valuable work.&lt;br /&gt;
&lt;br /&gt;
Not every customer needs to surrender control over his tools and information merely because centralized systems are technically possible.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project provides one practical example.&lt;br /&gt;
&lt;br /&gt;
A capable desktop application can perform work locally when that work belongs naturally on the user&#039;s computer, while communicating with remote services when centralized resources are genuinely appropriate.&lt;br /&gt;
&lt;br /&gt;
The question is not “desktop versus cloud” as an ideology.&lt;br /&gt;
&lt;br /&gt;
It is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Where should this work properly be done?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is a question of Practical Wisdom and subsidiarity.&lt;br /&gt;
&lt;br /&gt;
=== Solidarity means the independent programmer is not alone ===&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not mean radical individualism.&lt;br /&gt;
&lt;br /&gt;
Perl Guilds does not imagine the independent programmer as an isolated genius who owes nothing to anyone.&lt;br /&gt;
&lt;br /&gt;
The craftsman depends upon others constantly.&lt;br /&gt;
&lt;br /&gt;
He uses languages written by others.&lt;br /&gt;
&lt;br /&gt;
He installs modules maintained by others.&lt;br /&gt;
&lt;br /&gt;
He reads documentation written by others.&lt;br /&gt;
&lt;br /&gt;
He inherits operating systems, compilers, protocols, libraries, examples, standards, and accumulated technical knowledge.&lt;br /&gt;
&lt;br /&gt;
He may rely upon customers, fellow programmers, reviewers, mentors, maintainers, publishers, hosting providers, and communities.&lt;br /&gt;
&lt;br /&gt;
The virtue of &#039;&#039;&#039;Humility&#039;&#039;&#039; acknowledges this dependence.&lt;br /&gt;
&lt;br /&gt;
The principle of &#039;&#039;&#039;solidarity&#039;&#039;&#039; adds that the craftsman should also contribute to the good of others.&lt;br /&gt;
&lt;br /&gt;
This can take many forms:&lt;br /&gt;
&lt;br /&gt;
* answering a newcomer&#039;s question;&lt;br /&gt;
* maintaining a CPAN distribution;&lt;br /&gt;
* reporting a defect accurately;&lt;br /&gt;
* contributing a patch;&lt;br /&gt;
* writing documentation;&lt;br /&gt;
* sharing a working example;&lt;br /&gt;
* paying for a commercial tool when its author reasonably asks commercial users to support it;&lt;br /&gt;
* teaching an apprentice;&lt;br /&gt;
* referring work to another programmer;&lt;br /&gt;
* reviewing somebody else&#039;s code;&lt;br /&gt;
* preserving knowledge that might otherwise disappear;&lt;br /&gt;
* and helping another craftsman remain economically viable.&lt;br /&gt;
&lt;br /&gt;
The guild idea should therefore never become a closed caste.&lt;br /&gt;
&lt;br /&gt;
A healthy guild preserves knowledge, forms new craftsmen, supports independent work, and creates relationships in which people can help one another flourish.&lt;br /&gt;
&lt;br /&gt;
=== Apprenticeship protects the human transmission of knowledge ===&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence makes apprenticeship more important, not less.&lt;br /&gt;
&lt;br /&gt;
A new programmer can now ask an AI system to produce code that would once have required considerably more experience.&lt;br /&gt;
&lt;br /&gt;
That can be useful.&lt;br /&gt;
&lt;br /&gt;
It can also create the illusion of competence without understanding.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer Initiative therefore emphasizes the traditional progression from apprentice to journeyman to master.&lt;br /&gt;
&lt;br /&gt;
These words describe differences in experience, judgment, responsibility, and skill.&lt;br /&gt;
&lt;br /&gt;
They do not describe differences in human dignity.&lt;br /&gt;
&lt;br /&gt;
An apprentice learns not merely syntax but judgment.&lt;br /&gt;
&lt;br /&gt;
A journeyman learns to carry work independently and encounter problems outside the controlled environment of instruction.&lt;br /&gt;
&lt;br /&gt;
A master learns to bring significant work to completion, accept responsibility for it, and help form others.&lt;br /&gt;
&lt;br /&gt;
AI can assist at every stage.&lt;br /&gt;
&lt;br /&gt;
It cannot replace the human relationship through which judgment, responsibility, professional habits, and virtue are formed.&lt;br /&gt;
&lt;br /&gt;
An apprentice ultimately needs to learn why a solution is correct, when it is appropriate, what assumptions it contains, how it may fail, and who will bear the consequences.&lt;br /&gt;
&lt;br /&gt;
Those are human questions.&lt;br /&gt;
&lt;br /&gt;
=== A just livelihood is part of the project ===&lt;br /&gt;
&lt;br /&gt;
Perl Guilds also exists because programmers need to eat.&lt;br /&gt;
&lt;br /&gt;
They have families.&lt;br /&gt;
&lt;br /&gt;
They require homes.&lt;br /&gt;
&lt;br /&gt;
They need medical care, rest, education, savings, tools, and stability.&lt;br /&gt;
&lt;br /&gt;
The idea that programming is a craft includes the possibility that a person should be able to earn a &#039;&#039;&#039;just and sustainable livelihood&#039;&#039;&#039; through that craft.&lt;br /&gt;
&lt;br /&gt;
There is therefore nothing shameful about profit.&lt;br /&gt;
&lt;br /&gt;
A programmer may sell software.&lt;br /&gt;
&lt;br /&gt;
He may charge for consulting.&lt;br /&gt;
&lt;br /&gt;
He may provide commercial support.&lt;br /&gt;
&lt;br /&gt;
He may operate a hosted service.&lt;br /&gt;
&lt;br /&gt;
He may write a book.&lt;br /&gt;
&lt;br /&gt;
He may license a specialized tool.&lt;br /&gt;
&lt;br /&gt;
He may charge for customization, migration, training, maintenance, or integration.&lt;br /&gt;
&lt;br /&gt;
The moral question is not whether money changes hands.&lt;br /&gt;
&lt;br /&gt;
The question is whether exchange remains ordered toward justice and genuine service.&lt;br /&gt;
&lt;br /&gt;
Does the customer receive something of value?&lt;br /&gt;
&lt;br /&gt;
Are promises kept?&lt;br /&gt;
&lt;br /&gt;
Are workers compensated fairly?&lt;br /&gt;
&lt;br /&gt;
Are licenses respected?&lt;br /&gt;
&lt;br /&gt;
Are users manipulated into dependence unnecessarily?&lt;br /&gt;
&lt;br /&gt;
Does the business model encourage deception or exploitation?&lt;br /&gt;
&lt;br /&gt;
Can the work support the programmer&#039;s legitimate obligations to family and community?&lt;br /&gt;
&lt;br /&gt;
This places the economic aspirations of Perl Guilds within the same broad concern for the dignity of work expressed in &#039;&#039;Magnifica Humanitas&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The goal is not merely to maximize revenue.&lt;br /&gt;
&lt;br /&gt;
The goal is to make useful technical craftsmanship economically sustainable.&lt;br /&gt;
&lt;br /&gt;
=== AI should increase human capability, not erase human responsibility ===&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer Initiative is not hostile to artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
AI can be extraordinarily useful.&lt;br /&gt;
&lt;br /&gt;
It can help explain unfamiliar code.&lt;br /&gt;
&lt;br /&gt;
It can prepare drafts.&lt;br /&gt;
&lt;br /&gt;
It can suggest tests.&lt;br /&gt;
&lt;br /&gt;
It can help generate documentation.&lt;br /&gt;
&lt;br /&gt;
It can produce first versions of GUI layouts.&lt;br /&gt;
&lt;br /&gt;
It can assist with debugging.&lt;br /&gt;
&lt;br /&gt;
It can help a programmer explore alternatives faster than he could alone.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus work already demonstrates some of these possibilities.&lt;br /&gt;
&lt;br /&gt;
But AI remains a tool.&lt;br /&gt;
&lt;br /&gt;
The programmer remains responsible for understanding what is produced, determining whether it is appropriate, testing it, correcting it, and deciding whether it should be used at all.&lt;br /&gt;
&lt;br /&gt;
This is one of the clearest points of convergence with &#039;&#039;Magnifica Humanitas&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer should seek:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;automation without abdication.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can delegate computation.&lt;br /&gt;
&lt;br /&gt;
We can delegate repetitive manipulation.&lt;br /&gt;
&lt;br /&gt;
We can delegate the production of drafts.&lt;br /&gt;
&lt;br /&gt;
We cannot delegate moral responsibility simply by placing an algorithm between ourselves and the consequences.&lt;br /&gt;
&lt;br /&gt;
=== The Perl community itself is worth cultivating ===&lt;br /&gt;
&lt;br /&gt;
Finally, the Virtuous Programmer Initiative is not merely about improving individual programmers.&lt;br /&gt;
&lt;br /&gt;
It is about cultivating a community in which good programming can continue to exist.&lt;br /&gt;
&lt;br /&gt;
Perl has accumulated decades of knowledge, modules, practices, personalities, mistakes, successes, humor, and craftsmanship.&lt;br /&gt;
&lt;br /&gt;
That inheritance is valuable because of the people and useful work it enables.&lt;br /&gt;
&lt;br /&gt;
Preserving Perl therefore does not mean placing the language in a museum.&lt;br /&gt;
&lt;br /&gt;
It means creating conditions under which another generation can use it productively.&lt;br /&gt;
&lt;br /&gt;
That includes:&lt;br /&gt;
&lt;br /&gt;
* welcoming apprentices;&lt;br /&gt;
* preserving working knowledge;&lt;br /&gt;
* maintaining useful modules;&lt;br /&gt;
* documenting difficult systems;&lt;br /&gt;
* creating new commercial opportunities;&lt;br /&gt;
* demonstrating modern applications;&lt;br /&gt;
* encouraging independent craftsmen;&lt;br /&gt;
* producing books and essays;&lt;br /&gt;
* building tools;&lt;br /&gt;
* exploring artificial intelligence without surrendering judgment;&lt;br /&gt;
* and reminding the community that technical excellence is ultimately for the good of persons.&lt;br /&gt;
&lt;br /&gt;
This is why the Virtuous Programmer Initiative begins with virtue rather than merely technique.&lt;br /&gt;
&lt;br /&gt;
Technique tells us &#039;&#039;&#039;how&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Virtue helps us judge &#039;&#039;&#039;when&#039;&#039;&#039;, &#039;&#039;&#039;why&#039;&#039;&#039;, &#039;&#039;&#039;for whom&#039;&#039;&#039;, and &#039;&#039;&#039;toward what end&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== A shared question ==&lt;br /&gt;
&lt;br /&gt;
Perl Guilds, the Virtuous Programmer Initiative, and &#039;&#039;Magnifica Humanitas&#039;&#039; arise from very different kinds of institutions and possess very different purposes. Nothing here should be understood as claiming ecclesiastical endorsement of Perl Guilds or of any particular programming project.&lt;br /&gt;
&lt;br /&gt;
The point of convergence is more fundamental.&lt;br /&gt;
&lt;br /&gt;
They ask versions of the same human question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;What are our powers for?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perl gives programmers power.&lt;br /&gt;
&lt;br /&gt;
Open source gives communities power.&lt;br /&gt;
&lt;br /&gt;
Commerce gives businesses power.&lt;br /&gt;
&lt;br /&gt;
Automation gives organizations power.&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence gives developers and institutions extraordinary new power.&lt;br /&gt;
&lt;br /&gt;
Virtue concerns the proper use of that power.&lt;br /&gt;
&lt;br /&gt;
The work of Perl Guilds is therefore not simply to help programmers become more technically capable.&lt;br /&gt;
&lt;br /&gt;
It is to help cultivate craftsmen who can use technical capability wisely; who possess the spiritedness to undertake difficult and worthy work; who leave behind good order rather than chaos; who practice diligence, patience, and humility; who respect the dignity of users and fellow workers; who can earn a just livelihood through genuine service; and who can pass their knowledge to those who come after them.&lt;br /&gt;
&lt;br /&gt;
In that sense, the Virtuous Programmer Initiative is deeply consonant with the central challenge of &#039;&#039;Magnifica Humanitas&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The goal is not less technology.&lt;br /&gt;
&lt;br /&gt;
The goal is &#039;&#039;&#039;technology kept in its proper place&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The goal is not less human creativity.&lt;br /&gt;
&lt;br /&gt;
It is human creativity directed toward good ends.&lt;br /&gt;
&lt;br /&gt;
The goal is not to make programmers servants of increasingly powerful machines.&lt;br /&gt;
&lt;br /&gt;
It is to form programmers capable of making powerful machines into good servants of human beings.&lt;br /&gt;
&lt;br /&gt;
And the final measure of our technical work is therefore not simply how much we have built.&lt;br /&gt;
&lt;br /&gt;
It is what kind of people, communities, livelihoods, and human world our building helps to sustain.&lt;br /&gt;
&lt;br /&gt;
== Read the original ==&lt;br /&gt;
&lt;br /&gt;
This page is only an overview and necessarily leaves out much of the argument.&lt;br /&gt;
&lt;br /&gt;
Readers are strongly encouraged to read the encyclical itself:&lt;br /&gt;
&lt;br /&gt;
* [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html Pope Leo XIV, &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Open Sourcing the Virtues of a Perl Programmer]]&lt;br /&gt;
* [[The Real 3 Virtues of Perl]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
* [[:Category:The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
* [[:Category:Perl Guilds|Perl Guilds]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Magnifica Humanitas Plain-Language Overview}}&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Magnifica_Humanitas:_A_Plain-Language_Overview&amp;diff=395</id>
		<title>Magnifica Humanitas: A Plain-Language Overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Magnifica_Humanitas:_A_Plain-Language_Overview&amp;diff=395"/>
		<updated>2026-09-06T05:05:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:&amp;#039;&amp;#039;Magnifica Humanitas&amp;#039;&amp;#039;: A Plain-Language Overview}}  = &amp;#039;&amp;#039;Magnifica Humanitas&amp;#039;&amp;#039;: A Plain-Language Overview =  &amp;#039;&amp;#039;Pope Leo XIV&amp;#039;s 2026 encyclical &amp;#039;&amp;#039;&amp;#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&amp;#039;&amp;#039;&amp;#039; is a large document about a simple question: as human beings acquire greater technological power, what must we protect so that our progress remains genuinely human?&amp;#039;&amp;#039;&amp;lt;ref name=&amp;quot;MH&amp;quot;&amp;gt;Leo XIV, [https://www.vatican.va/cont...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:&#039;&#039;Magnifica Humanitas&#039;&#039;: A Plain-Language Overview}}&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;Magnifica Humanitas&#039;&#039;: A Plain-Language Overview =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pope Leo XIV&#039;s 2026 encyclical &#039;&#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;&#039; is a large document about a simple question: as human beings acquire greater technological power, what must we protect so that our progress remains genuinely human?&#039;&#039;&amp;lt;ref name=&amp;quot;MH&amp;quot;&amp;gt;Leo XIV, [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;], encyclical letter, 15 May 2026.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For readers who do not intend to work through the entire encyclical, this page offers a practical overview of its main ideas.&lt;br /&gt;
&lt;br /&gt;
The shortest possible summary is this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Technology is good when it serves human beings. Human beings must never be reduced to servants, inputs, data points, or obstacles in the service of technology.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That principle reaches far beyond artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; is about AI, but it is also about work, truth, freedom, economic power, human dignity, families, education, community, peace, responsibility, and the purpose of technological progress.&lt;br /&gt;
&lt;br /&gt;
== Why did Leo XIV write it? ==&lt;br /&gt;
&lt;br /&gt;
The title &#039;&#039;Magnifica Humanitas&#039;&#039; may be translated roughly as &#039;&#039;&#039;the grandeur of humanity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Leo XIV begins from the conviction that humanity is created by God and possesses a dignity which technological change cannot confer and cannot remove.&lt;br /&gt;
&lt;br /&gt;
The immediate setting is the extraordinary growth of artificial intelligence, robotics, digital platforms, biotechnology, and other forms of technological power. Leo XIV compares the present moment to the &#039;&#039;res novae&#039;&#039; — the “new things” — that confronted Pope Leo XIII during the Industrial Revolution.&lt;br /&gt;
&lt;br /&gt;
Leo XIII responded to the social upheavals of industrialization with &#039;&#039;Rerum Novarum&#039;&#039; in 1891.&lt;br /&gt;
&lt;br /&gt;
Leo XIV argues that our generation faces another set of “new things.” We therefore have to ask again:&lt;br /&gt;
&lt;br /&gt;
* What is technology for?&lt;br /&gt;
* Who benefits from it?&lt;br /&gt;
* Who controls it?&lt;br /&gt;
* Who bears responsibility for its consequences?&lt;br /&gt;
* What happens to workers?&lt;br /&gt;
* What happens to families?&lt;br /&gt;
* What happens to truth?&lt;br /&gt;
* What happens to the poor and powerless?&lt;br /&gt;
* What happens to human freedom?&lt;br /&gt;
* And, ultimately, does technological progress make human life more fully human?&lt;br /&gt;
&lt;br /&gt;
The encyclical does &#039;&#039;&#039;not&#039;&#039;&#039; argue that technology is inherently bad. Leo explicitly describes technology as part of human history and recognizes that technological development has greatly improved human life.&amp;lt;ref name=&amp;quot;MH&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem arises when the possession of technological power is confused with wisdom about how that power should be used.&lt;br /&gt;
&lt;br /&gt;
== The two construction projects ==&lt;br /&gt;
&lt;br /&gt;
One of the easiest ways to understand the entire encyclical is through two biblical images Leo uses repeatedly.&lt;br /&gt;
&lt;br /&gt;
The first is the &#039;&#039;&#039;Tower of Babel&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Babel represents a great human project built around power, domination, pride, and the desire to overcome every limit. It is technically impressive, but its apparent greatness ultimately produces division.&lt;br /&gt;
&lt;br /&gt;
The second is the &#039;&#039;&#039;rebuilding of Jerusalem under Nehemiah&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Jerusalem is rebuilt piece by piece through shared responsibility. Different people contribute to a common work. The result is not simply a monument to power, but the restoration of a community.&lt;br /&gt;
&lt;br /&gt;
Leo effectively asks us:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Which kind of world are we building?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An enormously powerful technological civilization can still be a Babel.&lt;br /&gt;
&lt;br /&gt;
A technically less spectacular society may be far more advanced in the things that finally matter if its institutions, technologies, and economy allow people to flourish together.&lt;br /&gt;
&lt;br /&gt;
== Human dignity does not come from productivity ==&lt;br /&gt;
&lt;br /&gt;
One of the most important claims in &#039;&#039;Magnifica Humanitas&#039;&#039; is that the value of a human person does not depend upon what that person can produce.&lt;br /&gt;
&lt;br /&gt;
A human being does not become valuable because he is intelligent, efficient, employable, wealthy, technically skilled, physically healthy, or economically productive.&lt;br /&gt;
&lt;br /&gt;
Human dignity is more fundamental than any of those things.&lt;br /&gt;
&lt;br /&gt;
Leo describes this deepest dignity as belonging to every person simply because that person exists, has been created and loved by God, and possesses a human nature which cannot be reduced to utility.&amp;lt;ref name=&amp;quot;MHDignity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 51–53, on the intrinsic and ontological dignity of every human person.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This has enormous implications for a technological society.&lt;br /&gt;
&lt;br /&gt;
If efficiency becomes the highest value, then people begin to be judged according to their usefulness.&lt;br /&gt;
&lt;br /&gt;
The elderly may appear inefficient.&lt;br /&gt;
&lt;br /&gt;
The disabled may appear expensive.&lt;br /&gt;
&lt;br /&gt;
Children may appear economically unproductive.&lt;br /&gt;
&lt;br /&gt;
Workers may appear replaceable.&lt;br /&gt;
&lt;br /&gt;
People whose skills are no longer fashionable may appear obsolete.&lt;br /&gt;
&lt;br /&gt;
But a person is not obsolete.&lt;br /&gt;
&lt;br /&gt;
A human being is not a machine whose value can be calculated from output.&lt;br /&gt;
&lt;br /&gt;
== AI is a tool, not a person ==&lt;br /&gt;
&lt;br /&gt;
Leo XIV makes a clear distinction between artificial intelligence and human intelligence.&lt;br /&gt;
&lt;br /&gt;
AI systems can imitate certain operations associated with human intelligence. They may process enormous quantities of information, recognize patterns, generate language, solve particular problems, and perform some tasks faster or more accurately than a human being.&lt;br /&gt;
&lt;br /&gt;
But this does not make them human persons.&lt;br /&gt;
&lt;br /&gt;
AI does not live a human life.&lt;br /&gt;
&lt;br /&gt;
It does not possess a body in the human sense.&lt;br /&gt;
&lt;br /&gt;
It does not experience childhood.&lt;br /&gt;
&lt;br /&gt;
It does not suffer, love, form friendships, raise children, grow old, repent, hope, worship, or assume moral responsibility.&lt;br /&gt;
&lt;br /&gt;
It does not experience work from within.&lt;br /&gt;
&lt;br /&gt;
It does not possess human conscience and freedom merely because its output resembles intelligent conversation.&amp;lt;ref name=&amp;quot;MHAI&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 97–103, on artificial intelligence, human intelligence, responsibility and governance.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For that reason, AI should not be treated as though it were a new kind of human being.&lt;br /&gt;
&lt;br /&gt;
It is an extraordinarily powerful human-made tool.&lt;br /&gt;
&lt;br /&gt;
That distinction matters because responsibility cannot simply be transferred from people to machines.&lt;br /&gt;
&lt;br /&gt;
== Somebody remains responsible ==&lt;br /&gt;
&lt;br /&gt;
A recurrent temptation with complicated technology is to say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“The computer decided.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo rejects that escape.&lt;br /&gt;
&lt;br /&gt;
When an automated system affects someone&#039;s employment, reputation, credit, opportunities, access to services, safety, or freedom, a human moral responsibility remains.&lt;br /&gt;
&lt;br /&gt;
An algorithm cannot absolve the people and institutions that designed, selected, deployed, or relied upon it.&lt;br /&gt;
&lt;br /&gt;
The greater the consequences, the greater the need for accountability, transparency, and meaningful human judgment.&amp;lt;ref name=&amp;quot;MHAI&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is particularly important when a system appears neutral.&lt;br /&gt;
&lt;br /&gt;
Algorithms are created, trained, selected, configured, and deployed by human beings and institutions. They may reproduce assumptions, priorities, errors, and biases even when nobody explicitly programmed an instruction to discriminate.&lt;br /&gt;
&lt;br /&gt;
“AI said so” is therefore not an adequate moral explanation.&lt;br /&gt;
&lt;br /&gt;
== A special responsibility belongs to developers ==&lt;br /&gt;
&lt;br /&gt;
One part of the encyclical is unusually direct for those of us who write software.&lt;br /&gt;
&lt;br /&gt;
Leo XIV makes a specific appeal to developers of artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
Technological creation can be understood as one expression of human creativity, but every design decision carries assumptions about human beings and about the kind of behavior a system should encourage.&lt;br /&gt;
&lt;br /&gt;
Developers therefore carry a particular ethical responsibility.&lt;br /&gt;
&lt;br /&gt;
Transparency matters.&lt;br /&gt;
&lt;br /&gt;
Consequences matter.&lt;br /&gt;
&lt;br /&gt;
The communities affected by software matter.&lt;br /&gt;
&lt;br /&gt;
The purpose toward which the technology is being directed matters.&amp;lt;ref name=&amp;quot;MHDevelopers&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, no. 111, addressing developers of artificial intelligence and their ethical and spiritual responsibilities.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The programmer is not merely a pair of hands implementing somebody else&#039;s specification.&lt;br /&gt;
&lt;br /&gt;
Technical craftsmanship includes judgment.&lt;br /&gt;
&lt;br /&gt;
== Work is more than income ==&lt;br /&gt;
&lt;br /&gt;
This is one of the most important parts of &#039;&#039;Magnifica Humanitas&#039;&#039; for the &#039;&#039;&#039;Virtuous Programmer Initiative&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Leo XIV strongly rejects a view of work in which the worker is merely another component in a production system.&lt;br /&gt;
&lt;br /&gt;
Work provides income, but its importance is much greater.&lt;br /&gt;
&lt;br /&gt;
Through work people develop abilities, exercise responsibility, cooperate with others, support families, contribute to society, discover aspects of vocation, and participate in the creation and maintenance of the human world.&lt;br /&gt;
&lt;br /&gt;
For this reason, work itself has dignity.&amp;lt;ref name=&amp;quot;MHWork&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 149–169, on the dignity and value of work during digital transformation.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This changes the question we should ask about automation.&lt;br /&gt;
&lt;br /&gt;
The question cannot simply be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“How many workers can this technology eliminate?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A better question is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“How can this technology help human beings perform good work better?”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo warns specifically against a situation in which workers must increasingly adapt themselves to the speed and demands of machines instead of machines being designed to support workers.&amp;lt;ref name=&amp;quot;MHWork&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is an extremely important distinction.&lt;br /&gt;
&lt;br /&gt;
Technology should be adapted to humanity.&lt;br /&gt;
&lt;br /&gt;
Humanity should not be redesigned to fit technology.&lt;br /&gt;
&lt;br /&gt;
== Losing a job is not merely losing a paycheck ==&lt;br /&gt;
&lt;br /&gt;
Because work has a social and personal dimension, widespread technological unemployment cannot be treated merely as an accounting problem.&lt;br /&gt;
&lt;br /&gt;
The loss of work can also mean loss of:&lt;br /&gt;
&lt;br /&gt;
* responsibility;&lt;br /&gt;
* professional identity;&lt;br /&gt;
* stability;&lt;br /&gt;
* relationships;&lt;br /&gt;
* opportunities for young people;&lt;br /&gt;
* the ability to form and support families;&lt;br /&gt;
* confidence in the future;&lt;br /&gt;
* and participation in the life of a community.&lt;br /&gt;
&lt;br /&gt;
Leo therefore emphasizes education, retraining, opportunities for meaningful employment, stability for families, and a proper balance among work, leisure, and rest.&amp;lt;ref name=&amp;quot;MHWork&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A healthy economy exists for human beings.&lt;br /&gt;
&lt;br /&gt;
Human beings do not exist for the economy.&lt;br /&gt;
&lt;br /&gt;
== Subsidiarity: do not take away what smaller communities can do ==&lt;br /&gt;
&lt;br /&gt;
Another major theme of the encyclical is &#039;&#039;&#039;subsidiarity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The idea is simple.&lt;br /&gt;
&lt;br /&gt;
Responsibilities should ordinarily remain with the smallest or most local person, family, community, organization, or institution capable of carrying them out competently.&lt;br /&gt;
&lt;br /&gt;
Larger institutions should assist smaller ones when necessary.&lt;br /&gt;
&lt;br /&gt;
They should not unnecessarily absorb their responsibilities.&lt;br /&gt;
&lt;br /&gt;
A higher authority therefore exists partly to &#039;&#039;&#039;support&#039;&#039;&#039; the ability of smaller communities to act, not simply to replace them.&amp;lt;ref name=&amp;quot;MHSubsidiarity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 68–72, on the principle of subsidiarity and its application to digital power.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This becomes especially interesting in the digital world.&lt;br /&gt;
&lt;br /&gt;
Today, enormous technology companies and platforms may exercise forms of practical power that were once associated primarily with governments.&lt;br /&gt;
&lt;br /&gt;
They can determine:&lt;br /&gt;
&lt;br /&gt;
* who is visible;&lt;br /&gt;
* who can participate;&lt;br /&gt;
* which software may run;&lt;br /&gt;
* who has access to data;&lt;br /&gt;
* which businesses reach customers;&lt;br /&gt;
* what rules govern communication;&lt;br /&gt;
* and what opportunities exist within entire digital ecosystems.&lt;br /&gt;
&lt;br /&gt;
Leo argues that such power should not become opaque and unilateral.&lt;br /&gt;
&lt;br /&gt;
People and smaller institutions need meaningful opportunities to participate, understand decisions, seek recourse, and retain genuine freedom of action.&amp;lt;ref name=&amp;quot;MHSubsidiarity&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subsidiarity needs solidarity ==&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not mean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Everyone is on his own.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Leo pairs it with &#039;&#039;&#039;solidarity&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Solidarity means recognizing that our good is connected with the good of other people.&lt;br /&gt;
&lt;br /&gt;
The strong have obligations toward the weak.&lt;br /&gt;
&lt;br /&gt;
Communities have obligations toward their members.&lt;br /&gt;
&lt;br /&gt;
Individuals have obligations toward their communities.&lt;br /&gt;
&lt;br /&gt;
Nations and institutions have responsibilities that extend beyond narrow self-interest.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity without solidarity can become selfishness.&lt;br /&gt;
&lt;br /&gt;
Solidarity without subsidiarity can become paternalism which deprives people of responsibility and initiative.&amp;lt;ref name=&amp;quot;MHSolidarity&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 73–75, on solidarity and its relationship to subsidiarity.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two principles belong together.&lt;br /&gt;
&lt;br /&gt;
Help people.&lt;br /&gt;
&lt;br /&gt;
Do not unnecessarily take over their lives.&lt;br /&gt;
&lt;br /&gt;
== The common good is more than everyone&#039;s private interests added together ==&lt;br /&gt;
&lt;br /&gt;
Another recurring expression is the &#039;&#039;&#039;common good&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This does not simply mean finding a compromise among competing individual interests.&lt;br /&gt;
&lt;br /&gt;
The common good concerns the social conditions in which people and communities are actually able to flourish.&amp;lt;ref name=&amp;quot;MHCommonGood&amp;quot;&amp;gt;Leo XIV, &#039;&#039;Magnifica Humanitas&#039;&#039;, especially nos. 59–64, on the principle of the common good.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A society may generate extraordinary wealth while still failing the common good if that prosperity requires large numbers of people to become disposable, powerless, isolated, or unable to participate meaningfully in society.&lt;br /&gt;
&lt;br /&gt;
Technology must therefore be judged partly by its social consequences.&lt;br /&gt;
&lt;br /&gt;
Who gains power?&lt;br /&gt;
&lt;br /&gt;
Who loses it?&lt;br /&gt;
&lt;br /&gt;
Who gains opportunities?&lt;br /&gt;
&lt;br /&gt;
Who becomes dependent?&lt;br /&gt;
&lt;br /&gt;
Who controls the infrastructure?&lt;br /&gt;
&lt;br /&gt;
Who owns the knowledge?&lt;br /&gt;
&lt;br /&gt;
Who may participate?&lt;br /&gt;
&lt;br /&gt;
Who is excluded?&lt;br /&gt;
&lt;br /&gt;
These are not questions outside technology.&lt;br /&gt;
&lt;br /&gt;
Once technology changes the conditions of human life, they become technological questions as well.&lt;br /&gt;
&lt;br /&gt;
== Information and truth matter ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; also treats truth as a common good.&lt;br /&gt;
&lt;br /&gt;
Digital technology can make knowledge available with extraordinary speed, but it can also multiply falsehood, manipulation, synthetic media, addictive communication, and environments in which people no longer know whom to trust.&lt;br /&gt;
&lt;br /&gt;
A society cannot function indefinitely without some shared ability to establish facts.&lt;br /&gt;
&lt;br /&gt;
Technology should therefore strengthen rather than deliberately undermine people&#039;s ability to perceive reality, exercise judgment, and communicate truthfully.&lt;br /&gt;
&lt;br /&gt;
Human attention itself should not be regarded merely as another commodity to capture and sell.&lt;br /&gt;
&lt;br /&gt;
== Freedom can be lost gradually ==&lt;br /&gt;
&lt;br /&gt;
Leo also warns about dependency.&lt;br /&gt;
&lt;br /&gt;
People can surrender meaningful freedom without anybody formally taking it away.&lt;br /&gt;
&lt;br /&gt;
A person&#039;s choices may increasingly be shaped by:&lt;br /&gt;
&lt;br /&gt;
* addictive systems;&lt;br /&gt;
* recommendation algorithms;&lt;br /&gt;
* surveillance;&lt;br /&gt;
* commercial profiling;&lt;br /&gt;
* social pressure;&lt;br /&gt;
* technological dependence;&lt;br /&gt;
* monopolized platforms;&lt;br /&gt;
* and services which have become difficult to live without.&lt;br /&gt;
&lt;br /&gt;
Freedom therefore requires more than the existence of a button labeled “I Agree.”&lt;br /&gt;
&lt;br /&gt;
It requires conditions in which people remain capable of understanding, choosing, refusing, participating, and acting responsibly.&lt;br /&gt;
&lt;br /&gt;
== The problem is not AI versus humanity ==&lt;br /&gt;
&lt;br /&gt;
One of the most useful things about &#039;&#039;Magnifica Humanitas&#039;&#039; is that it avoids two simplistic positions.&lt;br /&gt;
&lt;br /&gt;
It does not say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“AI will save us.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And it does not say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Technology is evil.”&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real choice is between &#039;&#039;&#039;different ways of developing and using technology&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
We can build technology around power, domination, control, consumption, and efficiency as ends in themselves.&lt;br /&gt;
&lt;br /&gt;
Or we can build technology around human dignity, justice, participation, responsibility, work, family, truth, community, and the common good.&lt;br /&gt;
&lt;br /&gt;
That is the contrast between Babel and Jerusalem.&lt;br /&gt;
&lt;br /&gt;
== Why programmers should care ==&lt;br /&gt;
&lt;br /&gt;
For programmers, this encyclical is unusually relevant.&lt;br /&gt;
&lt;br /&gt;
Software increasingly determines how other people:&lt;br /&gt;
&lt;br /&gt;
* communicate;&lt;br /&gt;
* work;&lt;br /&gt;
* obtain information;&lt;br /&gt;
* receive services;&lt;br /&gt;
* conduct business;&lt;br /&gt;
* learn;&lt;br /&gt;
* spend money;&lt;br /&gt;
* exercise authority;&lt;br /&gt;
* and understand the world.&lt;br /&gt;
&lt;br /&gt;
That gives programmers genuine power.&lt;br /&gt;
&lt;br /&gt;
It also gives us genuine responsibilities.&lt;br /&gt;
&lt;br /&gt;
The programmer therefore cannot finally judge a program merely by asking:&lt;br /&gt;
&lt;br /&gt;
* Does it compile?&lt;br /&gt;
* Does it pass the tests?&lt;br /&gt;
* Is it fast?&lt;br /&gt;
* Does it scale?&lt;br /&gt;
* Is the architecture elegant?&lt;br /&gt;
* Can it be automated?&lt;br /&gt;
* Can AI generate it?&lt;br /&gt;
* Will somebody pay for it?&lt;br /&gt;
&lt;br /&gt;
Those are legitimate questions.&lt;br /&gt;
&lt;br /&gt;
They simply are not the final questions.&lt;br /&gt;
&lt;br /&gt;
The Virtuous Programmer must eventually ask:&lt;br /&gt;
&lt;br /&gt;
* Is it true?&lt;br /&gt;
* Is it useful?&lt;br /&gt;
* Whom does it serve?&lt;br /&gt;
* Whom might it harm?&lt;br /&gt;
* Does it respect the user?&lt;br /&gt;
* Does it respect the worker?&lt;br /&gt;
* Does it leave meaningful human responsibility somewhere?&lt;br /&gt;
* Does it enlarge human capacity or merely create dependence?&lt;br /&gt;
* Does it allow smaller communities and individuals to act?&lt;br /&gt;
* Does it serve a genuinely good end?&lt;br /&gt;
&lt;br /&gt;
This is where &#039;&#039;Magnifica Humanitas&#039;&#039; intersects directly with [[Open Sourcing the Virtues of a Perl Programmer]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical Wisdom&#039;&#039;&#039; asks what our technical power ought to be used for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spiritedness&#039;&#039;&#039; gives us the energy to confront systems that are broken, unjust, dehumanizing, or simply poor servants of their users.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Good Order&#039;&#039;&#039; asks us to build technologies, projects, businesses, and communities in forms that human beings can inhabit rather than merely endure.&lt;br /&gt;
&lt;br /&gt;
And &#039;&#039;&#039;Diligence, Patience, and Humility&#039;&#039;&#039; remind us that technical brilliance is not the same thing as wisdom.&lt;br /&gt;
&lt;br /&gt;
== The programmer is not the machine ==&lt;br /&gt;
&lt;br /&gt;
One of the most important consequences of the encyclical for the current AI age can be stated very simply:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Your value as a programmer is not the sum of the code you produce.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A faster machine does not diminish your dignity.&lt;br /&gt;
&lt;br /&gt;
An AI system that generates a thousand lines of code in seconds does not become a better human craftsman than the programmer who needs an afternoon to understand a difficult problem.&lt;br /&gt;
&lt;br /&gt;
The human programmer can know why the work is being done.&lt;br /&gt;
&lt;br /&gt;
He can accept responsibility for it.&lt;br /&gt;
&lt;br /&gt;
He can care about the customer.&lt;br /&gt;
&lt;br /&gt;
He can recognize that a technically possible action should not be performed.&lt;br /&gt;
&lt;br /&gt;
He can teach an apprentice.&lt;br /&gt;
&lt;br /&gt;
He can support a family through his work.&lt;br /&gt;
&lt;br /&gt;
He can make promises and keep them.&lt;br /&gt;
&lt;br /&gt;
He can repent when he has acted wrongly.&lt;br /&gt;
&lt;br /&gt;
He can serve another human being deliberately.&lt;br /&gt;
&lt;br /&gt;
These are not incidental limitations surrounding the “real” activity of computation.&lt;br /&gt;
&lt;br /&gt;
They belong to what makes human work human.&lt;br /&gt;
&lt;br /&gt;
== The whole document in ten points ==&lt;br /&gt;
&lt;br /&gt;
For the reader who remembers nothing else, &#039;&#039;Magnifica Humanitas&#039;&#039; can be reduced — somewhat unfairly, but usefully — to ten practical ideas:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Every human being has dignity that does not depend on intelligence, productivity, wealth, health, or usefulness.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Technology is a human tool and can accomplish enormous good.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;More technological power does not automatically mean more wisdom or more human progress.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Artificial intelligence is not human intelligence and must not replace human moral responsibility.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Developers and institutions remain responsible for what their systems do to people.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Work is part of human flourishing, not merely a cost of production to be eliminated.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Smaller communities, families, workers, and individuals should retain real responsibility and freedom whenever possible.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Solidarity requires us to care about people who might otherwise be excluded from technological progress.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Truth, freedom, family, community, justice, and the common good are legitimate standards by which technological progress should be judged.&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;The ultimate question is not simply what we can build, but what kind of human world we are building.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Babel or Jerusalem? ==&lt;br /&gt;
&lt;br /&gt;
That final question may be the easiest way to remember the encyclical.&lt;br /&gt;
&lt;br /&gt;
Human ingenuity is real.&lt;br /&gt;
&lt;br /&gt;
Technological progress is real.&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence is powerful.&lt;br /&gt;
&lt;br /&gt;
Economic productivity matters.&lt;br /&gt;
&lt;br /&gt;
Scientific discovery is good.&lt;br /&gt;
&lt;br /&gt;
None of these things is God.&lt;br /&gt;
&lt;br /&gt;
None of them defines the worth of a human person.&lt;br /&gt;
&lt;br /&gt;
None of them supplies its own moral purpose.&lt;br /&gt;
&lt;br /&gt;
We therefore remain responsible for deciding what to build.&lt;br /&gt;
&lt;br /&gt;
The construction site is already open.&lt;br /&gt;
&lt;br /&gt;
The tools are already in our hands.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Magnifica Humanitas&#039;&#039; asks us to decide whether we are building Babel or rebuilding Jerusalem.&lt;br /&gt;
&lt;br /&gt;
== Read the original ==&lt;br /&gt;
&lt;br /&gt;
This page is only an overview and necessarily leaves out much of the argument.&lt;br /&gt;
&lt;br /&gt;
Readers are strongly encouraged to read the encyclical itself:&lt;br /&gt;
&lt;br /&gt;
* [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html Pope Leo XIV, &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Open Sourcing the Virtues of a Perl Programmer]]&lt;br /&gt;
* [[The Real 3 Virtues of Perl]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
* [[:Category:The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
* [[:Category:Perl Guilds|Perl Guilds]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Magnifica Humanitas Plain-Language Overview}}&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Aristotle-sheila-terry-230968414.jpg&amp;diff=394</id>
		<title>File:Aristotle-sheila-terry-230968414.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Aristotle-sheila-terry-230968414.jpg&amp;diff=394"/>
		<updated>2026-09-06T04:29:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=393</id>
		<title>Open Sourcing the Virtues of a Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=393"/>
		<updated>2026-09-06T04:22:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Open Sourcing the Virtues of a Perl Programmer =&lt;br /&gt;
&lt;br /&gt;
[[File:aristotle-sheila-terry-230968414.jpg|thumb|right|420px|alt=Aristotle, whose account of virtue and human flourishing provides an important philosophical foundation for this paper|Aristotle, whose account of virtue and human flourishing provides an important philosophical foundation for the framework developed in this paper.]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
When Larry Wall introduced the Perl faithful to the “Three Virtues of a Programmer” — &#039;&#039;laziness&#039;&#039;, &#039;&#039;impatience&#039;&#039;, and &#039;&#039;hubris&#039;&#039; — he also explained exactly what he meant.&amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt; The explanations are far more important than the provocative labels. Taken literally, the three words name dispositions traditionally treated as vices; taken in Wall&#039;s intended sense, however, they point toward habits of judgment, energy, craftsmanship, and responsibility that can genuinely serve a programmer and a community. This paper argues that the Perl community can speak more accurately about those habits by naming the virtues Wall actually described: &#039;&#039;Practical Wisdom&#039;&#039;, &#039;&#039;Spiritedness&#039;&#039;, and &#039;&#039;Good Order&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The intended audience remains first and foremost the Perl community. The wider claim is modest: because programming communities inevitably develop ideas about what makes a good programmer, maintainer, contributor, and steward, Perl&#039;s unusually explicit vocabulary of “virtues” offers a useful case study that readers from other technical communities can understand. The purpose is not to replace Perl&#039;s culture with an abstract ethics of software, but to recover and clarify something already present within Perl&#039;s own culture.&lt;br /&gt;
&lt;br /&gt;
This essay is also written openly from the standpoint of a Catholic Perl programmer. Catholic and classical virtue traditions provide much of the vocabulary used to interpret Wall&#039;s descriptions, but the argument does not require every Perl programmer to share that standpoint. A reader need only ask a practical question familiar to every open-source community: what habits help people use technical power well, work together fruitfully, and hand on something worth maintaining?&lt;br /&gt;
&lt;br /&gt;
=== Virtue, Vice, and the Long Tradition Behind Them ===&lt;br /&gt;
&lt;br /&gt;
The language of virtue and vice belongs to several ancient traditions. Scriptural wisdom literature repeatedly distinguishes habits that lead toward a well-ordered and flourishing life from habits that lead toward disorder. In classical Greek philosophy, Aristotle gave one of the most influential systematic accounts of virtue, describing moral excellence as a stable disposition ordered by reason toward &#039;&#039;eudaimonia&#039;&#039; — human flourishing — and often situated between characteristic extremes of deficiency and excess.&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Christian thinkers later received and developed this classical vocabulary. St. Thomas Aquinas integrated Aristotelian moral philosophy into a Christian account of the virtues, giving prudence a governing role because it applies right reason to action.&amp;lt;ref name=&amp;quot;AquinasST&amp;quot; /&amp;gt; Other Christian writers emphasized how otherwise good powers can become distorted when separated from truth, right ends, or the other virtues. This language later appeared in many forms of civic and character education, including chivalric ideals and, much later, the Scout tradition.&lt;br /&gt;
&lt;br /&gt;
The point here is not to claim a single unbroken historical chain for every virtue named in this paper. It is to identify a durable pattern: virtue concerns the good use of human powers. A capacity can be deficient, rightly ordered, or excessive. Courage can become cowardice through deficiency or recklessness through excess; prudence can collapse into shortsightedness on one side or endless deliberation on the other. The same pattern is useful when examining the habits celebrated within a programming community.&lt;br /&gt;
&lt;br /&gt;
=== About Objective Truth and Human Ends ===&lt;br /&gt;
&lt;br /&gt;
Underlying both classical and Christian accounts of virtue is the claim that a virtue must be oriented toward what is true and toward a genuinely good end. Aristotle&#039;s practical wisdom requires sound judgment about circumstances and ends; in the Thomistic tradition, prudence guides action rather than merely admiring clever possibilities. Chesterton&#039;s later warning about virtues that become detached and “go mad” expresses the same practical concern from another angle.&amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In programming, truth has an unusually concrete presence. Code either behaves as claimed or it does not; data either represent reality adequately or they do not; an interface either helps its users accomplish their work or frustrates them. Yet technical truth alone does not answer every question. A program can be correct and still be needlessly hostile to users, impossible for maintainers to understand, or brilliantly optimized for a purpose that does not deserve the effort invested in it. Virtue therefore concerns both truthful understanding and the ends toward which technical ability is directed.&lt;br /&gt;
&lt;br /&gt;
The Perl community, like every collaborative technical culture, depends on such judgments. &#039;&#039;Practical Wisdom&#039;&#039; requires seeing the real problem rather than merely the interesting one. &#039;&#039;Spiritedness&#039;&#039; requires knowing what is worth caring enough to fix or defend. &#039;&#039;Good Order&#039;&#039; requires structures that serve people rather than rules that exist only to perpetuate themselves. When these virtues are anchored in truth and good ends, they guide the community toward clarity, cooperation, useful work, and flourishing. When that anchor is lost, even genuine strengths can pull a project off course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Perl&#039;s Virtues ==&lt;br /&gt;
&lt;br /&gt;
Aristotle&#039;s account of virtue is often summarized through the image of a mean between extremes. This does not mean that every virtue is a simple arithmetic midpoint, but it provides a useful way to see how a human capacity can fail through both deficiency and excess.&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt; The following table gives familiar examples from the classical tradition.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Selected classical examples of virtue understood between characteristic extremes of deficiency and excess&lt;br /&gt;
! Deficiency (Extreme)&lt;br /&gt;
! Virtue&lt;br /&gt;
! Excess (Extreme)&lt;br /&gt;
|-&lt;br /&gt;
| Cowardice&lt;br /&gt;
| Courage&lt;br /&gt;
| Recklessness&lt;br /&gt;
|-&lt;br /&gt;
| Insensibility&lt;br /&gt;
| Temperance&lt;br /&gt;
| Overindulgence&lt;br /&gt;
|-&lt;br /&gt;
| Stinginess&lt;br /&gt;
| Generosity&lt;br /&gt;
| Prodigality (Wastefulness)&lt;br /&gt;
|-&lt;br /&gt;
| Self-deprecation&lt;br /&gt;
| Truthfulness&lt;br /&gt;
| Boastfulness&lt;br /&gt;
|-&lt;br /&gt;
| Boorishness&lt;br /&gt;
| Wit&lt;br /&gt;
| Buffoonery&lt;br /&gt;
|-&lt;br /&gt;
| Quarrelsomeness&lt;br /&gt;
| Friendliness&lt;br /&gt;
| Obsequiousness&lt;br /&gt;
|-&lt;br /&gt;
| Pettiness&lt;br /&gt;
| Magnificence&lt;br /&gt;
| Vulgarity&lt;br /&gt;
|-&lt;br /&gt;
| Pusillanimity (Smallness of Soul)&lt;br /&gt;
| Magnanimity (Greatness of Soul)&lt;br /&gt;
| Vanity&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Applied to Perl, the same framework helps separate Wall&#039;s memorable labels from the dispositions his explanations actually praise. The following table summarizes the proposal developed in the following subsections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ The three proposed Perl virtues viewed between characteristic deficiencies and excesses in community and project life&lt;br /&gt;
! Deficiency in Perl Culture&lt;br /&gt;
! Virtue&lt;br /&gt;
! Excess or Distortion&lt;br /&gt;
|-&lt;br /&gt;
| Repeated manual toil; failure to learn from experience; solving the visible task without considering the total cost of ownership&lt;br /&gt;
| &#039;&#039;&#039;Practical Wisdom (Prudence)&#039;&#039;&#039;&lt;br /&gt;
| Over-engineering; abstraction for its own sake; analysis paralysis; gatekeeping disguised as “best practice”&lt;br /&gt;
|-&lt;br /&gt;
| Apathy toward bugs, users, documentation, regressions, or the health of a project&lt;br /&gt;
| &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&lt;br /&gt;
| Combativeness; flame-war zeal; personal crusades; treating technical disagreement as disloyalty&lt;br /&gt;
|-&lt;br /&gt;
| Chaotic code, neglected maintenance, undocumented conventions, or structures no one can safely inherit&lt;br /&gt;
| &#039;&#039;&#039;Good Order&#039;&#039;&#039;&lt;br /&gt;
| Bureaucracy; rigid process; purity tests; suppressing experimentation merely to preserve existing structure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can describe what Larry Wall meant in terms that retain his practical insight while distinguishing the virtues from the deliberately provocative names attached to them.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Practical Wisdom&#039;&#039; or Prudence, Not Laziness ===&lt;br /&gt;
&lt;br /&gt;
Unlike the vice of laziness, this virtue concerns practical wisdom: the ability to make sound decisions and take fitting action based on understanding, experience, consequences, and the real end being pursued. This aligns closely with Wall&#039;s explanation of laziness as the quality that motivates a programmer to expend effort now in order to reduce the total expenditure of effort later.&amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt; The programmer writes a reusable tool, automates repetitive work, or documents a system because doing so serves future users and maintainers.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is not simply “working too hard.” It is failing to learn from repeated work: performing the same tedious task indefinitely, writing disposable fixes when a durable solution is warranted, or optimizing the immediate moment while imposing avoidable costs on everyone who follows. The excessive extreme appears when foresight becomes over-engineering — a framework for a problem that may never exist, an abstraction nobody can understand, or endless deliberation that prevents useful code from being released. Practical wisdom lies in judging how much architecture, automation, documentation, and foresight the real problem actually deserves.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Spiritedness&#039;&#039;, Not Impatience ===&lt;br /&gt;
&lt;br /&gt;
Accounting for the passionate aspect of human nature, spiritedness encompasses the energy that makes a person care that something is broken, slow, unjust, neglected, or needlessly difficult. Wall&#039;s “impatience” describes anger at a computer that is failing to serve human needs and the resulting desire to make software more responsive and anticipatory.&amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt; Properly ordered, that energy is productive: it turns irritation into repair.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is apathy. A project can decline because nobody cares enough to fix a regression, answer a newcomer, update a document, challenge a harmful assumption, or carry an abandoned module forward. The excessive extreme is familiar to every long-lived online community: technical disagreement becomes personal combat, urgency becomes contempt, and conviction becomes a crusade. Spiritedness is therefore not mere anger; it is energy disciplined toward a good worth pursuing.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Good Order&#039;&#039;, Not Hubris ===&lt;br /&gt;
&lt;br /&gt;
Far from harmful pride, Good Order concerns the disposition to leave code, projects, and communities in a condition that other people can inhabit. Wall&#039;s explanation of “hubris” points toward the desire to write and maintain programs whose quality will withstand the judgment of others.&amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt; At its best, that is not vanity but stewardship: clear interfaces, maintainable code, responsible releases, useful documentation, and conventions that reduce needless friction.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is disorder: clever but inscrutable code, abandoned distributions, inconsistent processes, and institutional memory that exists only in the head of one indispensable maintainer. The excessive extreme is order treated as an end in itself — process that smothers contribution, style rules elevated above substance, or governance that protects its own machinery more carefully than the people and work the machinery was meant to serve. Good Order is structure proportioned to a real human and technical purpose.&lt;br /&gt;
&lt;br /&gt;
== Integration with Open-Source Virtues ==&lt;br /&gt;
&lt;br /&gt;
The classical Greek virtues of &#039;&#039;Phronesis&#039;&#039; (practical wisdom), &#039;&#039;Thumos&#039;&#039; (spirited courage), and &#039;&#039;Eunomia&#039;&#039; (good or harmonious order) defined the character of the ideal citizen. Rooted in the life of the &#039;&#039;polis&#039;&#039;, these virtues were action-oriented, oriented toward maintaining civic balance, excellence in judgment, and readiness to act in defense of justice and collective well-being. Yet as societies have evolved — particularly with the emergence of networked, decentralized, and digital modes of collaboration — these ancient frameworks alone no longer suffice. The open-source movement, where governance is informal and authority often implicit, has prompted the emergence of a complementary ethical framework.&lt;br /&gt;
&lt;br /&gt;
Larry Wall further articulated three virtues of a great programmer: &#039;&#039;&#039;Diligence&#039;&#039;&#039;, &#039;&#039;&#039;Patience&#039;&#039;&#039;, and &#039;&#039;&#039;Humility&#039;&#039;&#039;.&amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt; These are not technical rules but character traits — habits of mind and behavior essential to sustainable, productive participation in shared intellectual labor. Notably, these virtues are often self-directed and interpersonal rather than outwardly political or heroic. When examined alongside classical civic virtues, they do not contradict them, but rather enhance them — modulating their assertiveness with reflection, softening their rigidity with empathy, and balancing their ambition with long-term care.&lt;br /&gt;
&lt;br /&gt;
=== Virtue Augmentation Comparison ===&lt;br /&gt;
&lt;br /&gt;
Wall&#039;s virtues can be interpreted as augmentative operators. They do not replace the classical Greek ideals but transform and ground them for application in collaborative contexts. Their role is not merely additive but synergistic: they enable classical virtues to function meaningfully in modern contexts, especially where authority is decentralized and consensus is valued over command.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Open-source virtues as modifiers of classical Greek ethics&lt;br /&gt;
! Greek Virtue&lt;br /&gt;
! Augmented by&lt;br /&gt;
! Contribution of Wall&#039;s Virtue&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Phronesis&#039;&#039; (Practical Wisdom)&lt;br /&gt;
| Diligence&lt;br /&gt;
| Activates judgment through persistent and careful action; bridges theory and execution&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Thumos&#039;&#039; (Courageous Will)&lt;br /&gt;
| Patience&lt;br /&gt;
| Restrains impulsiveness, converts reaction into sustained resilience and thoughtful agency&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Eunomia&#039;&#039; (Harmonious Order)&lt;br /&gt;
| Humility&lt;br /&gt;
| Opens space for mutual respect and shared authorship; discourages domination&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this comparative table, we can see how each open-source virtue enhances its classical counterpart by rooting it in a practice-oriented and collaborative mindset. Diligence makes wisdom operational; patience makes courage sustainable; humility makes order inclusive.&lt;br /&gt;
&lt;br /&gt;
=== Synthesized Virtue Matrix ===&lt;br /&gt;
&lt;br /&gt;
Combining these dual traditions yields a more resilient and adaptable ethical framework. Where Greek virtues often center on decisive action in a civic sphere, open-source virtues orient toward longevity, community stewardship, and ethical restraint. The synthesis invites not just right action, but right process.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Synthesized framework of classical and open-source virtues&lt;br /&gt;
! Ethical Dimension&lt;br /&gt;
! Greek Root&lt;br /&gt;
! Wall&#039;s Modifier&lt;br /&gt;
! Resulting Synthesis&lt;br /&gt;
|-&lt;br /&gt;
| Knowing&lt;br /&gt;
| &#039;&#039;Phronesis&#039;&#039;&lt;br /&gt;
| Diligence&lt;br /&gt;
| Active Wisdom: persistent insight tested through practice&lt;br /&gt;
|-&lt;br /&gt;
| Acting&lt;br /&gt;
| &#039;&#039;Thumos&#039;&#039;&lt;br /&gt;
| Patience&lt;br /&gt;
| Disciplined Courage: resolve tempered by endurance and timing&lt;br /&gt;
|-&lt;br /&gt;
| Ordering&lt;br /&gt;
| &#039;&#039;Eunomia&#039;&#039;&lt;br /&gt;
| Humility&lt;br /&gt;
| Collaborative Order: authority shaped through shared responsibility&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expanded Analysis ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Diligence as Applied Phronesis ====&lt;br /&gt;
&lt;br /&gt;
Phronesis is the Greek conception of wise deliberation applied to practical life. It presumes experience, situational awareness, and moral clarity. However, without the habit of follow-through, even wise judgment can remain inert. Wall&#039;s &#039;&#039;diligence&#039;&#039; injects a vital quality into phronesis: the determination to act, not once, but persistently. In a codebase, as in life, it is diligence that refines understanding, uncovers edge cases, and brings clarity to complexity. Active wisdom — phronesis enhanced by diligence — is wisdom made real in repetitive, conscientious labor. It resists premature optimization and values maintenance as much as invention.&lt;br /&gt;
&lt;br /&gt;
==== 2. Patience as Moderated Thumos ====&lt;br /&gt;
&lt;br /&gt;
Thumos denotes spiritedness: the fire of the soul that asserts, resists, and protects. It is tied to courage, honor, and drive. Yet left untempered, thumos can lead to rashness or arrogance. Patience reframes courage as endurance rather than bravado. It is not a denial of energy but its distillation. The open-source contributor often faces invisible work, slow feedback cycles, and interpersonal disagreement. Patience empowers the will to persist not in domination but in consistency. It allows contributors to disengage from ego, listen deeply, and re-enter the arena with fresh clarity. Disciplined courage arises when thumos and patience cohere.&lt;br /&gt;
&lt;br /&gt;
==== 3. Humility as Inclusive Eunomia ====&lt;br /&gt;
&lt;br /&gt;
Eunomia, literally “good law,” is the virtue of civic order and well-structured community. It promotes harmony, proportionality, and accountability. However, in both ancient and modern contexts, order has risked rigidity or coercion. Humility softens this. In Wall&#039;s framework, humility does not imply passivity, but rather epistemic modesty — the recognition that one&#039;s code, vision, or solution is partial. It affirms the value of others&#039; insights and invites inclusive participation. Where eunomia organizes power through law, humility decentralizes it through acknowledgment of interdependence. The result is collaborative order: not a blueprint imposed, but a structure evolved in common.&lt;br /&gt;
&lt;br /&gt;
=== Implications and Synthesis ===&lt;br /&gt;
&lt;br /&gt;
The synthesis of Wall&#039;s and the Greeks&#039; virtues yields a contemporary framework for ethical action — especially in domains where power is fluid, contribution is voluntary, and consensus is negotiated. It is not a replacement of heroic ideals, but a recalibration. Classical virtues teach us to act with clarity, honor, and civic purpose. Open-source virtues remind us to act with care, discipline, and the humility of uncertainty.&lt;br /&gt;
&lt;br /&gt;
This convergence is especially significant in today&#039;s digital and institutional landscapes. Many collaborative projects — whether software, science, or civil society — depend not just on brilliance, but on patience. Not just on leadership, but on listening. Not just on vision, but on maintenance. A contributor who brings both phronesis and diligence can navigate ambiguity; one who carries thumos and patience can resist burnout and rage; one who embraces eunomia and humility can shape fair systems without authoritarianism.&lt;br /&gt;
&lt;br /&gt;
In this light, the three classical virtues can be seen as vertical axes — orienting us toward noble ideals and external responsibility — while Wall&#039;s virtues serve as horizontal stabilizers, grounding our efforts in sustainable, interpersonal practice. Together, they form an ethical gyroscope for civic-technological engagement.&lt;br /&gt;
&lt;br /&gt;
== Perl&#039;s Virtues in a Broader Programming Context ==&lt;br /&gt;
&lt;br /&gt;
The framework developed here is intentionally anchored in Perl. Perl is unusual in having a founder who supplied the community with an explicit and memorable vocabulary of programmer “virtues,” and Wall later complicated that vocabulary by speaking of diligence, patience, and humility as complementary virtues for open-source life.&amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt; That makes Perl more than an incidental example: it is the community whose own language generated the question this paper is trying to answer.&lt;br /&gt;
&lt;br /&gt;
At the same time, the pattern is intelligible outside Perl. Programming communities routinely encode judgments about good practice in slogans, style guides, design principles, review customs, release expectations, and stories about exemplary maintainers. Some emphasize readability, some minimalism, some safety, some portability, some performance, some composability. Those priorities are not identical, but they all reveal that software communities cultivate dispositions as well as techniques. They teach members not only &#039;&#039;how&#039;&#039; to make software, but what kinds of technical judgment and social conduct the community admires.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s contribution to this wider discussion is therefore not a universal three-item code imposed on every programmer. It is a particularly vivid case study of a community discovering that the words used to celebrate technical behavior matter. If Perl can distinguish a witty vice-label from the virtue actually being praised, other communities can likewise ask whether their own slogans still name the habits they genuinely wish to cultivate. The wider applicability strengthens, rather than displaces, the Perl-centered purpose of this paper.&lt;br /&gt;
&lt;br /&gt;
== Technology Ordered Toward Human Flourishing: A Later Convergence ==&lt;br /&gt;
&lt;br /&gt;
The central argument of this paper was developed before Robert Francis Prevost was elected Pope Leo XIV in May 2025 and before the publication of his first encyclical, &#039;&#039;Magnifica Humanitas&#039;&#039;, in May 2026.&amp;lt;ref name=&amp;quot;LeoXIVBiography&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt; That chronology is worth stating because the argument offered here was not constructed around the encyclical. Rather, Leo XIV&#039;s later treatment of technology provides a striking contemporary convergence with the older virtue framework already being applied to Perl: technical power is a means, and the decisive question is the human good toward which that power is ordered.&lt;br /&gt;
&lt;br /&gt;
Although &#039;&#039;Magnifica Humanitas&#039;&#039; was written in response to a period of rapid development in artificial intelligence and related technologies, its central principle is broader than AI. Leo XIV does not portray technology as inherently opposed to humanity. He treats technological development as a profoundly human activity capable of improving human life, while insisting that tools become destructive when they are not directed toward the good.&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt; His concern is therefore not simply whether a technology works, scales, optimizes, or increases capability, but what kind of human life those powers help to build. Throughout the encyclical, the criterion repeatedly returns to the dignity of persons, the common good, integral human development, and the possibility for persons and peoples to flourish.&lt;br /&gt;
&lt;br /&gt;
For a paper about programmer virtue, this is the important point. Technical excellence is real, but it is a subordinate good. Efficiency, automation, expressive power, elegant abstractions, sophisticated tooling, and even the survival of a programming language are not final ends in themselves. Their value is finally measured by the good they enable human beings and communities to pursue.&lt;br /&gt;
&lt;br /&gt;
=== Leo XIV, Leo XIII, St. Thomas, and Aristotle ===&lt;br /&gt;
&lt;br /&gt;
Leo XIV himself places this technological moment in continuity with Leo XIII. In &#039;&#039;Magnifica Humanitas&#039;&#039;, he explicitly recalls the &#039;&#039;res novae&#039;&#039; — the “new things” — that confronted Leo XIII during the industrial transformation addressed in &#039;&#039;Rerum Novarum&#039;&#039;, and argues that the Church must likewise interpret the “new things” of the present technological age.&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;LeoXIII1891&amp;quot; /&amp;gt; The analogy is especially apt because neither pontificate begins by asking whether a new technology or economic power is simply good or bad. The deeper question is how new forms of power affect human persons, relationships, work, responsibility, and the common good.&lt;br /&gt;
&lt;br /&gt;
The line can be traced farther back without pretending that every document is merely a restatement of the one before it. Leo XIII&#039;s pontificate deliberately restored St. Thomas Aquinas to a central place in Catholic philosophical formation in &#039;&#039;Aeterni Patris&#039;&#039;.&amp;lt;ref name=&amp;quot;LeoXIII1879&amp;quot; /&amp;gt; Thomas, in turn, received and transformed much of Aristotle&#039;s moral philosophy. His account of prudence as reason rightly governing action openly draws on Aristotle&#039;s treatment of practical wisdom.&amp;lt;ref name=&amp;quot;AquinasST&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt; Aristotle&#039;s ethical inquiry itself is ordered toward &#039;&#039;eudaimonia&#039;&#039;: the flourishing life that gives individual virtues their place within a larger account of human good.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Aristotle → St. Thomas Aquinas → Leo XIII → Leo XIV&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aristotle supplies a durable language of virtue, practical wisdom, ends, and flourishing. St. Thomas integrates that moral vocabulary into a broader account of human action and the good. Leo XIII brings a Thomistic intellectual orientation to a pontificate confronting the social consequences of industrial modernity. Leo XIV consciously returns to Leo XIII&#039;s &#039;&#039;res novae&#039;&#039; at another moment of technological transformation and again asks whether human powers are being ordered toward the flourishing of persons and communities. This is an intellectual inheritance rather than a claim of simple one-to-one textual dependence, but the continuity of the question is clear: &#039;&#039;what are our powers for?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== A Perl Application: The Tool Is Not the End ===&lt;br /&gt;
&lt;br /&gt;
The author writes as both a Catholic and a Perl programmer, so this lineage is not external decoration added to a technical culture from somewhere else; it is part of the intellectual vocabulary through which the author understands craftsmanship, community, and responsibility. Nevertheless, the application to Perl does not require a reader to be Catholic. The claim is practical and broadly accessible: technology is a tool, and tools should be judged in part by the human goods they serve.&lt;br /&gt;
&lt;br /&gt;
Perl is itself a tool-building culture. The language, CPAN, test frameworks, automation, compilers, editors, deployment systems, and newer AI-assisted tools all extend human capability. Any of them can be used well or badly. AI is only one contemporary example. The principle applies just as readily to a regular expression, a build system, a package index, a web framework, or a programming language: increased power does not tell us what the power is for.&lt;br /&gt;
&lt;br /&gt;
This is where the proposed Perl virtues become especially useful. &#039;&#039;Practical Wisdom&#039;&#039; asks whether a technical choice serves the real problem and the people who live with the solution. &#039;&#039;Spiritedness&#039;&#039; supplies the energy to improve tools when they fail those people. &#039;&#039;Good Order&#039;&#039; leaves code and institutions in a form others can inherit. Wall&#039;s complementary virtues of &#039;&#039;Diligence&#039;&#039;, &#039;&#039;Patience&#039;&#039;, and &#039;&#039;Humility&#039;&#039; keep technical power from becoming self-regarding: they remind the contributor that maintenance matters, that people learn and collaborate at human speeds, and that no single programmer&#039;s cleverness exhausts what a project may need.&amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seen this way, human flourishing is not an ornamental concept placed beside programming. It supplies the end that gives programmer virtue its direction. A Perl project flourishes when people can solve real problems, learn from one another, earn trust, maintain what they inherit, welcome useful contributions, and pass knowledge forward. Even the desire to keep Perl vigorous for another generation is best understood in this way: the language matters because of the human work, relationships, creativity, livelihoods, service, and learning it makes possible. The tool is important; the people and the goods they pursue are the reason for the tool.&lt;br /&gt;
&lt;br /&gt;
== When Virtues Go Mad: A Chestertonian Warning ==&lt;br /&gt;
&lt;br /&gt;
G. K. Chesterton observed that virtues become dangerous when they become detached from one another and “go mad.”&amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot; /&amp;gt; The same warning applies to the virtues proposed here. A complementary point is that a virtue can fail not only through excess, but through deficiency. The Perl community therefore benefits from examining both edges of each virtue rather than merely replacing one provocative vice-label with a more respectable word.&lt;br /&gt;
&lt;br /&gt;
=== Practical Wisdom Between Shortsightedness and Overthinking ===&lt;br /&gt;
&lt;br /&gt;
Practical Wisdom fails through deficiency when contributors repeatedly solve only the immediate problem: manual work is needlessly repeated, local fixes accumulate, documentation is deferred forever, and nobody considers the future maintainer. It fails through excess when deliberation becomes an end in itself: architectures are designed for hypothetical futures, abstractions multiply faster than users, and “best practice” becomes a reason that no imperfect but useful solution may ship.&lt;br /&gt;
&lt;br /&gt;
The virtuous mean is not mediocrity. It is proportionate judgment — enough foresight to reduce needless future cost, enough restraint to keep the solution answerable to the problem that actually exists.&lt;br /&gt;
&lt;br /&gt;
=== Spiritedness Between Apathy and Combativeness ===&lt;br /&gt;
&lt;br /&gt;
Spiritedness fails through deficiency when a contributor simply stops caring. Bugs linger because they are someone else&#039;s problem; newcomers go unanswered; a useful distribution decays because nobody feels responsible for it; a damaging assumption survives because challenging it would require effort. Open source cannot flourish on indifference.&lt;br /&gt;
&lt;br /&gt;
The excessive form is equally familiar: urgency becomes contempt, technical disagreement becomes moral combat, and advocacy becomes a personal crusade. The Perl community has always contained strong personalities and strong opinions; the virtue is not the elimination of that energy but its discipline toward repair, truth, and the good of the community.&lt;br /&gt;
&lt;br /&gt;
=== Good Order Between Neglect and Stagnation ===&lt;br /&gt;
&lt;br /&gt;
Good Order fails through deficiency when there is no dependable structure to inherit: code is clever but opaque, release practices live only in memory, documentation is stale, ownership is unclear, and useful conventions exist only as oral tradition. Such disorder eventually makes contribution harder even for talented people.&lt;br /&gt;
&lt;br /&gt;
Good Order goes mad when structure protects itself. Processes multiply because processes already exist; stylistic purity outweighs usefulness; governance becomes inaccessible to newcomers; experimentation is treated as a threat. What began as an attempt to make collaboration easier can become a barrier to collaboration. The right kind of order is therefore ordered again toward people and useful work.&lt;br /&gt;
&lt;br /&gt;
=== Why Both Extremes Matter ===&lt;br /&gt;
&lt;br /&gt;
Deficiencies are often easier to recognize because something visibly fails to happen: a bug is not fixed, a module is not maintained, documentation is not written. Excesses can be more dangerous precisely because they can masquerade as excellence. Over-engineering can call itself wisdom; aggression can call itself commitment; bureaucracy can call itself quality. Naming the virtue correctly is therefore only the beginning. The community must also remember the end for which the virtue exists.&lt;br /&gt;
&lt;br /&gt;
Balanced together, Practical Wisdom, Spiritedness, and Good Order form a stable foundation for Perl craftsmanship and community stewardship. Diligence, Patience, and Humility help keep those powers integrated. The goal is not to make Perl programmers less energetic, less ingenious, or less opinionated. It is to direct those strengths toward work and relationships in which people can flourish.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
This remains, deliberately, a paper for the Perl community. Its starting point is Larry Wall&#039;s language, its examples come from Perl project and community life, and its practical hope is that Perl programmers will speak more accurately about the habits they wish to cultivate. Wall&#039;s famous &#039;&#039;laziness&#039;&#039;, &#039;&#039;impatience&#039;&#039;, and &#039;&#039;hubris&#039;&#039; remain memorable jokes and useful cultural shorthand, but the behaviors he actually praised are better described as &#039;&#039;Practical Wisdom&#039;&#039;, &#039;&#039;Spiritedness&#039;&#039;, and &#039;&#039;Good Order&#039;&#039;. His later appeal to &#039;&#039;Diligence&#039;&#039;, &#039;&#039;Patience&#039;&#039;, and &#039;&#039;Humility&#039;&#039; supplies an important complementary set of virtues for sustaining those powers in open-source community life.&amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dr. Christos Argyropoulos&#039;s suggestion to examine the extremes and make the argument intelligible beyond a single language strengthens rather than weakens this Perl focus. Perl becomes a case study that outsiders can understand precisely because its community has spoken so explicitly about programmer character. Other communities may recognize analogous questions in their own cultures, but Perl remains the home of the argument.&lt;br /&gt;
&lt;br /&gt;
The later convergence with Pope Leo XIV&#039;s &#039;&#039;Magnifica Humanitas&#039;&#039; adds one final perspective. This essay&#039;s central claim predates both Leo XIV&#039;s election and his encyclical, yet his insistence that technological power be ordered toward human dignity, the common good, and human flourishing gives contemporary expression to a very old principle.&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt; From Aristotle&#039;s &#039;&#039;eudaimonia&#039;&#039;, through St. Thomas&#039;s account of prudence, through Leo XIII&#039;s response to the industrial &#039;&#039;res novae&#039;&#039;, to Leo XIV&#039;s response to the technological &#039;&#039;res novae&#039;&#039;, the recurring question is not simply what human beings are capable of building, but what those capabilities are for.&lt;br /&gt;
&lt;br /&gt;
That question belongs in Perl as surely as it belongs anywhere else technology is made. Perl is a language, an ecosystem, and a collection of powerful tools, but its highest value is realized through the people who use those tools to solve problems, create, teach, maintain, serve, earn livelihoods, build institutions, and help one another. There are many virtues that can benefit the Perl community as it moves forward, but a good beginning is to name clearly the ones already hiding in plain sight.&lt;br /&gt;
&lt;br /&gt;
Thank you, Larry Wall.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
&lt;br /&gt;
The author is especially grateful to Dr. Christos Argyropoulos for his thoughtful review of this paper. Although he identified no material defects in the original argument, his recommendation to expand the treatment of the virtues through examples of their extremes, and to make the framework intelligible beyond Perl without losing its Perl roots, materially strengthened the present revision. His comments prompted the more explicit deficiency–virtue–excess analysis and helped clarify how the Perl community&#039;s distinctive vocabulary can contribute to a wider conversation about technical character and stewardship.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Wall1996&amp;quot;&amp;gt;Larry Wall, Tom Christiansen, and Randal L. Schwartz, &#039;&#039;Programming Perl&#039;&#039;, 2nd ed. Sebastopol, California: O&#039;Reilly &amp;amp; Associates, 1996.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;wall1999&amp;quot;&amp;gt;Larry Wall, “Diligence, Patience, and Humility,” in &#039;&#039;Open Sources: Voices from the Open Source Revolution&#039;&#039;, ed. Chris DiBona, Sam Ockman, and Mark Stone. Sebastopol, California: O&#039;Reilly &amp;amp; Associates, 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot;&amp;gt;G. K. Chesterton, &#039;&#039;Orthodoxy&#039;&#039;. New York: John Lane Company, 1908.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot;&amp;gt;Aristotle, &#039;&#039;Nicomachean Ethics&#039;&#039;, trans. Terence Irwin, 2nd ed. Indianapolis, Indiana: Hackett Publishing Company, 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;AquinasST&amp;quot;&amp;gt;Thomas Aquinas, &#039;&#039;Summa Theologica&#039;&#039;, trans. Fathers of the English Dominican Province. New York: Benziger Brothers, 1947. Originally written ca. 1265–1274; see especially IIa-IIae, q. 47 and related questions on prudence.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1879&amp;quot;&amp;gt;Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_04081879_aeterni-patris.html &#039;&#039;Aeterni Patris: On the Restoration of Christian Philosophy&#039;&#039;], encyclical letter, 4 August 1879.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1891&amp;quot;&amp;gt;Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_15051891_rerum-novarum.html &#039;&#039;Rerum Novarum: On Capital and Labor&#039;&#039;], encyclical letter, 15 May 1891.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIVBiography&amp;quot;&amp;gt;Holy See, [https://www.vatican.va/content/leo-xiv/en/biography/documents/biografia_leone-xiv.html “Biography of the Holy Father Leo XIV”], Vatican.va, 2025. Records the election of Robert Francis Prevost as Pope Leo XIV on 8 May 2025.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot;&amp;gt;Leo XIV, [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;], encyclical letter, 15 May 2026.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The Real 3 Virtues of Perl]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
* [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
* [[The Perl Lazarus Workshop]]&lt;br /&gt;
* [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
* [[:Category:The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
* [[:Category:Perl Guilds|Perl Guilds]]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Open Sourcing the Virtues of a Perl Programmer}}&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Perl]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Open Source]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=392</id>
		<title>Open Sourcing the Virtues of a Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=392"/>
		<updated>2026-09-06T04:22:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: Replaced content with &amp;quot;== References ==  &amp;lt;references&amp;gt; &amp;lt;ref name=&amp;quot;Wall1996&amp;quot;&amp;gt;Larry Wall, Tom Christiansen, and Randal L. Schwartz, &amp;#039;&amp;#039;Programming Perl&amp;#039;&amp;#039;, 2nd ed. Sebastopol, California: O&amp;#039;Reilly &amp;amp; Associates, 1996.&amp;lt;/ref&amp;gt;  &amp;lt;ref name=&amp;quot;wall1999&amp;quot;&amp;gt;Larry Wall, “Diligence, Patience, and Humility,” in &amp;#039;&amp;#039;Open Sources: Voices from the Open Source Revolution&amp;#039;&amp;#039;, ed. Chris DiBona, Sam Ockman, and Mark Stone. Sebastopol, California: O&amp;#039;Reilly &amp;amp; Associates, 1999.&amp;lt;/ref&amp;gt;  &amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot;&amp;gt;G. K. C...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Wall1996&amp;quot;&amp;gt;Larry Wall, Tom Christiansen, and Randal L. Schwartz, &#039;&#039;Programming Perl&#039;&#039;, 2nd ed. Sebastopol, California: O&#039;Reilly &amp;amp; Associates, 1996.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;wall1999&amp;quot;&amp;gt;Larry Wall, “Diligence, Patience, and Humility,” in &#039;&#039;Open Sources: Voices from the Open Source Revolution&#039;&#039;, ed. Chris DiBona, Sam Ockman, and Mark Stone. Sebastopol, California: O&#039;Reilly &amp;amp; Associates, 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot;&amp;gt;G. K. Chesterton, &#039;&#039;Orthodoxy&#039;&#039;. New York: John Lane Company, 1908.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot;&amp;gt;Aristotle, &#039;&#039;Nicomachean Ethics&#039;&#039;, trans. Terence Irwin, 2nd ed. Indianapolis, Indiana: Hackett Publishing Company, 1999.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;AquinasST&amp;quot;&amp;gt;Thomas Aquinas, &#039;&#039;Summa Theologica&#039;&#039;, trans. Fathers of the English Dominican Province. New York: Benziger Brothers, 1947. Originally written ca. 1265–1274; see especially IIa-IIae, q. 47 and related questions on prudence.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1879&amp;quot;&amp;gt;Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_04081879_aeterni-patris.html &#039;&#039;Aeterni Patris: On the Restoration of Christian Philosophy&#039;&#039;], encyclical letter, 4 August 1879.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1891&amp;quot;&amp;gt;Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_15051891_rerum-novarum.html &#039;&#039;Rerum Novarum: On Capital and Labor&#039;&#039;], encyclical letter, 15 May 1891.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIVBiography&amp;quot;&amp;gt;Holy See, [https://www.vatican.va/content/leo-xiv/en/biography/documents/biografia_leone-xiv.html “Biography of the Holy Father Leo XIV”], Vatican.va, 2025. Records the election of Robert Francis Prevost as Pope Leo XIV on 8 May 2025.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot;&amp;gt;Leo XIV, [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;], encyclical letter, 15 May 2026.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=391</id>
		<title>Open Sourcing the Virtues of a Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Open_Sourcing_the_Virtues_of_a_Perl_Programmer&amp;diff=391"/>
		<updated>2026-09-06T04:19:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Open Sourcing the Virtues of a Perl Programmer}}  &amp;#039;&amp;#039;This article is part of the Virtuous Perl Programmer series and the &amp;#039;&amp;#039;&amp;#039;Virtuous Programmer Initiative&amp;#039;&amp;#039;&amp;#039;. It is a MediaWiki edition of the author&amp;#039;s paper of the same title; the prose and argument have been retained while the LaTeX formatting has been adapted for the wiki.&amp;#039;&amp;#039;  &amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt; Brett Estrade (OODLER)&amp;lt;br /&amp;gt; Acutis Computer &amp;amp;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Open Sourcing the Virtues of a Perl Programmer}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is part of the [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]] series and the &#039;&#039;&#039;Virtuous Programmer Initiative&#039;&#039;&#039;. It is a MediaWiki edition of the author&#039;s paper of the same title; the prose and argument have been retained while the LaTeX formatting has been adapted for the wiki.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
Brett Estrade (OODLER)&amp;lt;br /&amp;gt;&lt;br /&gt;
Acutis Computer &amp;amp;amp; Data Consultancy &amp;lt;ref&amp;gt;A DBA of Coastal Computing Services, LLC. Correspondence: [mailto:brett@acutisdata.com brett@acutisdata.com].&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Science Perl Committee, The Perl Community&amp;lt;br /&amp;gt;&lt;br /&gt;
Perl-Guilds.net / The Virtuous Programmer Initiative&amp;lt;br /&amp;gt;&lt;br /&gt;
Houston, Texas, USA&amp;lt;br /&amp;gt;&lt;br /&gt;
September 2026&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[File:aristotle-sheila-terry-230968414.jpg|thumb|right|360px|alt=Aristotle|Aristotle, whose account of virtue and human flourishing provides an important philosophical foundation for the framework developed in this paper.]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
When Larry Wall introduced the Perl faithful to the “Three Virtues of a Programmer”—&#039;&#039;laziness&#039;&#039;, &#039;&#039;impatience&#039;&#039;, and &#039;&#039;hubris&#039;&#039;—he also explained exactly what he meant &amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt;. The explanations are far more important than the provocative labels. Taken literally, the three words name dispositions traditionally treated as vices; taken in Wall’s intended sense, however, they point toward habits of judgment, energy, craftsmanship, and responsibility that can genuinely serve a programmer and a community. This paper argues that the Perl community can speak more accurately about those habits by naming the virtues Wall actually described: &#039;&#039;Practical Wisdom&#039;&#039;, &#039;&#039;Spiritedness&#039;&#039;, and &#039;&#039;Good Order&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The intended audience remains first and foremost the Perl community. The wider claim is modest: because programming communities inevitably develop ideas about what makes a good programmer, maintainer, contributor, and steward, Perl’s unusually explicit vocabulary of “virtues” offers a useful case study that readers from other technical communities can understand. The purpose is not to replace Perl’s culture with an abstract ethics of software, but to recover and clarify something already present within Perl’s own culture.&lt;br /&gt;
&lt;br /&gt;
This essay is also written openly from the standpoint of a Catholic Perl programmer. Catholic and classical virtue traditions provide much of the vocabulary used to interpret Wall’s descriptions, but the argument does not require every Perl programmer to share that standpoint. A reader need only ask a practical question familiar to every open-source community: what habits help people use technical power well, work together fruitfully, and hand on something worth maintaining?&lt;br /&gt;
&lt;br /&gt;
=== Virtue, Vice, and the Long Tradition Behind Them ===&lt;br /&gt;
The language of virtue and vice belongs to several ancient traditions. Scriptural wisdom literature repeatedly distinguishes habits that lead toward a well-ordered and flourishing life from habits that lead toward disorder. In classical Greek philosophy, Aristotle gave one of the most influential systematic accounts of virtue, describing moral excellence as a stable disposition ordered by reason toward &#039;&#039;eudaimonia&#039;&#039;—human flourishing—and often situated between characteristic extremes of deficiency and excess &amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Christian thinkers later received and developed this classical vocabulary. St. Thomas Aquinas integrated Aristotelian moral philosophy into a Christian account of the virtues, giving prudence a governing role because it applies right reason to action &amp;lt;ref name=&amp;quot;AquinasST&amp;quot; /&amp;gt;. Other Christian writers emphasized how otherwise good powers can become distorted when separated from truth, right ends, or the other virtues. This language later appeared in many forms of civic and character education, including chivalric ideals and, much later, the Scout tradition.&lt;br /&gt;
&lt;br /&gt;
The point here is not to claim a single unbroken historical chain for every virtue named in this paper. It is to identify a durable pattern: virtue concerns the good use of human powers. A capacity can be deficient, rightly ordered, or excessive. Courage can become cowardice through deficiency or recklessness through excess; prudence can collapse into shortsightedness on one side or endless deliberation on the other. The same pattern is useful when examining the habits celebrated within a programming community.&lt;br /&gt;
&lt;br /&gt;
=== About Objective Truth and Human Ends ===&lt;br /&gt;
Underlying both classical and Christian accounts of virtue is the claim that a virtue must be oriented toward what is true and toward a genuinely good end. Aristotle’s practical wisdom requires sound judgment about circumstances and ends; in the Thomistic tradition, prudence guides action rather than merely admiring clever possibilities. Chesterton’s later warning about virtues that become detached and “go mad” expresses the same practical concern from another angle &amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In programming, truth has an unusually concrete presence. Code either behaves as claimed or it does not; data either represent reality adequately or they do not; an interface either helps its users accomplish their work or frustrates them. Yet technical truth alone does not answer every question. A program can be correct and still be needlessly hostile to users, impossible for maintainers to understand, or brilliantly optimized for a purpose that does not deserve the effort invested in it. Virtue therefore concerns both truthful understanding and the ends toward which technical ability is directed.&lt;br /&gt;
&lt;br /&gt;
The Perl community, like every collaborative technical culture, depends on such judgments. &#039;&#039;Practical Wisdom&#039;&#039; requires seeing the real problem rather than merely the interesting one. &#039;&#039;Spiritedness&#039;&#039; requires knowing what is worth caring enough to fix or defend. &#039;&#039;Good Order&#039;&#039; requires structures that serve people rather than rules that exist only to perpetuate themselves. When these virtues are anchored in truth and good ends, they guide the community toward clarity, cooperation, useful work, and flourishing. When that anchor is lost, even genuine strengths can pull a project off course.&lt;br /&gt;
&lt;br /&gt;
== Perl’s Virtues ==&lt;br /&gt;
Aristotle’s account of virtue is often summarized through the image of a mean between extremes. This does not mean that every virtue is a simple arithmetic midpoint, but it provides a useful way to see how a human capacity can fail through both deficiency and excess &amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt;. Table 1 gives familiar examples from the classical tradition.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 1. Selected classical examples of virtue understood between characteristic extremes of deficiency and excess.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Deficiency (Extreme)&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Virtue&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Excess (Extreme)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Cowardice&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Courage&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Recklessness&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Insensibility&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Temperance&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Overindulgence&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Stinginess&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Generosity&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Prodigality (Wastefulness)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Self-deprecation&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Truthfulness&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Boastfulness&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Boorishness&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Wit&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Buffoonery&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Quarrelsomeness&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Friendliness&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Obsequiousness&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Pettiness&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Magnificence&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Vulgarity&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Pusillanimity (Smallness of Soul)&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Magnanimity (Greatness of Soul)&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Vanity&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Applied to Perl, the same framework helps separate Wall’s memorable labels from the dispositions his explanations actually praise. Table 2 summarizes the proposal developed in the following subsections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 2. The three proposed Perl virtues viewed between characteristic deficiencies and excesses in community and project life.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Deficiency in Perl Culture&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Virtue&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Excess or Distortion&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Repeated manual toil; failure to learn from experience; solving the visible task without considering the total cost of ownership&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Practical Wisdom (Prudence)&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Over-engineering; abstraction for its own sake; analysis paralysis; gatekeeping disguised as “best practice”&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Apathy toward bugs, users, documentation, regressions, or the health of a project&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Combativeness; flame-war zeal; personal crusades; treating technical disagreement as disloyalty&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Chaotic code, neglected maintenance, undocumented conventions, or structures no one can safely inherit&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Good Order&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Bureaucracy; rigid process; purity tests; suppressing experimentation merely to preserve existing structure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Here we can describe what Larry Wall meant in terms that retain his practical insight while distinguishing the virtues from the deliberately provocative names attached to them.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;&#039;&#039;Practical Wisdom&#039;&#039;&#039; or Prudence, Not Laziness&#039;&#039; ===&lt;br /&gt;
Unlike the vice of laziness, this virtue concerns practical wisdom: the ability to make sound decisions and take fitting action based on understanding, experience, consequences, and the real end being pursued. This aligns closely with Wall’s explanation of laziness as the quality that motivates a programmer to expend effort now in order to reduce the total expenditure of effort later &amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt;. The programmer writes a reusable tool, automates repetitive work, or documents a system because doing so serves future users and maintainers.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is not simply “working too hard.” It is failing to learn from repeated work: performing the same tedious task indefinitely, writing disposable fixes when a durable solution is warranted, or optimizing the immediate moment while imposing avoidable costs on everyone who follows. The excessive extreme appears when foresight becomes over-engineering—a framework for a problem that may never exist, an abstraction nobody can understand, or endless deliberation that prevents useful code from being released. Practical wisdom lies in judging how much architecture, automation, documentation, and foresight the real problem actually deserves.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, Not Impatience&#039;&#039; ===&lt;br /&gt;
Accounting for the passionate aspect of human nature, spiritedness encompasses the energy that makes a person care that something is broken, slow, unjust, neglected, or needlessly difficult. Wall’s “impatience” describes anger at a computer that is failing to serve human needs and the resulting desire to make software more responsive and anticipatory &amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt;. Properly ordered, that energy is productive: it turns irritation into repair.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is apathy. A project can decline because nobody cares enough to fix a regression, answer a newcomer, update a document, challenge a harmful assumption, or carry an abandoned module forward. The excessive extreme is familiar to every long-lived online community: technical disagreement becomes personal combat, urgency becomes contempt, and conviction becomes a crusade. Spiritedness is therefore not mere anger; it is energy disciplined toward a good worth pursuing.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;, Not Hubris&#039;&#039; ===&lt;br /&gt;
Far from harmful pride, Good Order concerns the disposition to leave code, projects, and communities in a condition that other people can inhabit. Wall’s explanation of “hubris” points toward the desire to write and maintain programs whose quality will withstand the judgment of others &amp;lt;ref name=&amp;quot;Wall1996&amp;quot; /&amp;gt;. At its best, that is not vanity but stewardship: clear interfaces, maintainable code, responsible releases, useful documentation, and conventions that reduce needless friction.&lt;br /&gt;
&lt;br /&gt;
The deficient extreme is disorder: clever but inscrutable code, abandoned distributions, inconsistent processes, and institutional memory that exists only in the head of one indispensable maintainer. The excessive extreme is order treated as an end in itself—process that smothers contribution, style rules elevated above substance, or governance that protects its own machinery more carefully than the people and work the machinery was meant to serve. Good Order is structure proportioned to a real human and technical purpose.&lt;br /&gt;
&lt;br /&gt;
== Integration with Open-Source Virtues ==&lt;br /&gt;
The classical Greek virtues of &#039;&#039;Phronesis&#039;&#039; (practical wisdom), &#039;&#039;Thumos&#039;&#039; (spirited courage), and &#039;&#039;Eunomia&#039;&#039; (good or harmonious order) defined the character of the ideal citizen. Rooted in the life of the &#039;&#039;polis&#039;&#039;, these virtues were action-oriented, oriented toward maintaining civic balance, excellence in judgment, and readiness to act in defense of justice and collective well-being. Yet as societies have evolved—particularly with the emergence of networked, decentralized, and digital modes of collaboration—these ancient frameworks alone no longer suffice. The open-source movement, where governance is informal and authority often implicit, has prompted the emergence of a complementary ethical framework.&lt;br /&gt;
&lt;br /&gt;
In his 1999 essay “Diligence, Patience, and Humility,”&amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt; Larry Wall further articulated three virtues of a great programmer: &#039;&#039;&#039;Diligence&#039;&#039;&#039;, &#039;&#039;&#039;Patience&#039;&#039;&#039;, and &#039;&#039;&#039;Humility&#039;&#039;&#039;. These are not technical rules but character traits—habits of mind and behavior essential to sustainable, productive participation in shared intellectual labor. Notably, these virtues are often self-directed and interpersonal rather than outwardly political or heroic. When examined alongside classical civic virtues, they do not contradict them, but rather enhance them—modulating their assertiveness with reflection, softening their rigidity with empathy, and balancing their ambition with long-term care.&lt;br /&gt;
&lt;br /&gt;
=== Virtue Augmentation Comparison ===&lt;br /&gt;
Wall’s virtues can be interpreted as augmentative operators. They do not replace the classical Greek ideals but transform and ground them for application in collaborative contexts. Their role is not merely additive but synergistic: they enable classical virtues to function meaningfully in modern contexts, especially where authority is decentralized and consensus is valued over command.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 3. Open-source virtues as modifiers of classical Greek ethics&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Greek Virtue&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Augmented by&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Contribution of Wall’s Virtue&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Phronesis&#039;&#039; (Practical Wisdom)&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Diligence&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Activates judgment through persistent and careful action; bridges theory and execution&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Thumos&#039;&#039; (Courageous Will)&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Patience&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Restrains impulsiveness, converts reaction into sustained resilience and thoughtful agency&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Eunomia&#039;&#039; (Harmonious Order)&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Humility&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Opens space for mutual respect and shared authorship; discourages domination&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this comparative table, we can see how each open-source virtue enhances its classical counterpart by rooting it in a practice-oriented and collaborative mindset. Diligence makes wisdom operational; patience makes courage sustainable; humility makes order inclusive.&lt;br /&gt;
&lt;br /&gt;
=== Synthesized Virtue Matrix ===&lt;br /&gt;
Combining these dual traditions yields a more resilient and adaptable ethical framework. Where Greek virtues often center on decisive action in a civic sphere, open-source virtues orient toward longevity, community stewardship, and ethical restraint. The synthesis invites not just right action, but right process.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table 4. Synthesized framework of classical and open-source virtues&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Ethical Dimension&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Greek Root&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Wall’s Modifier&#039;&#039;&#039;&lt;br /&gt;
! style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Resulting Synthesis&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Knowing&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Phronesis&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Diligence&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Active Wisdom: persistent insight tested through practice&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Acting&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Thumos&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Patience&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Disciplined Courage: resolve tempered by endurance and timing&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Ordering&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;Eunomia&#039;&#039;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Humility&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| Collaborative Order: authority shaped through shared responsibility&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Expanded Analysis ===&lt;br /&gt;
===== 1. Diligence as Applied Phronesis. =====&lt;br /&gt;
Phronesis is the Greek conception of wise deliberation applied to practical life. It presumes experience, situational awareness, and moral clarity. However, without the habit of follow-through, even wise judgment can remain inert. Wall’s &#039;&#039;diligence&#039;&#039; injects a vital quality into phronesis: the determination to act, not once, but persistently. In a codebase, as in life, it is diligence that refines understanding, uncovers edge cases, and brings clarity to complexity. Active wisdom—phronesis enhanced by diligence—is wisdom made real in repetitive, conscientious labor. It resists premature optimization and values maintenance as much as invention.&lt;br /&gt;
&lt;br /&gt;
===== 2. Patience as Moderated Thumos. =====&lt;br /&gt;
Thumos denotes spiritedness: the fire of the soul that asserts, resists, and protects. It is tied to courage, honor, and drive. Yet left untempered, thumos can lead to rashness or arrogance. Patience reframes courage as endurance rather than bravado. It is not a denial of energy but its distillation. The open-source contributor often faces invisible work, slow feedback cycles, and interpersonal disagreement. Patience empowers the will to persist not in domination but in consistency. It allows contributors to disengage from ego, listen deeply, and re-enter the arena with fresh clarity. Disciplined courage arises when thumos and patience cohere.&lt;br /&gt;
&lt;br /&gt;
===== 3. Humility as Inclusive Eunomia. =====&lt;br /&gt;
Eunomia, literally &amp;amp;quot;good law,&amp;amp;quot; is the virtue of civic order and well-structured community. It promotes harmony, proportionality, and accountability. However, in both ancient and modern contexts, order has risked rigidity or coercion. Humility softens this. In Wall’s framework, humility does not imply passivity, but rather epistemic modesty—the recognition that one’s code, vision, or solution is partial. It affirms the value of others’ insights and invites inclusive participation. Where eunomia organizes power through law, humility decentralizes it through acknowledgment of interdependence. The result is collaborative order: not a blueprint imposed, but a structure evolved in common.&lt;br /&gt;
&lt;br /&gt;
=== Implications and Synthesis ===&lt;br /&gt;
The synthesis of Wall’s and the Greeks’ virtues yields a contemporary framework for ethical action—especially in domains where power is fluid, contribution is voluntary, and consensus is negotiated. It is not a replacement of heroic ideals, but a recalibration. Classical virtues teach us to act with clarity, honor, and civic purpose. Open-source virtues remind us to act with care, discipline, and the humility of uncertainty.&lt;br /&gt;
&lt;br /&gt;
This convergence is especially significant in today’s digital and institutional landscapes. Many collaborative projects—whether software, science, or civil society—depend not just on brilliance, but on patience. Not just on leadership, but on listening. Not just on vision, but on maintenance. A contributor who brings both phronesis and diligence can navigate ambiguity; one who carries thumos and patience can resist burnout and rage; one who embraces eunomia and humility can shape fair systems without authoritarianism.&lt;br /&gt;
&lt;br /&gt;
In this light, the three classical virtues can be seen as vertical axes—orienting us toward noble ideals and external responsibility—while Wall’s virtues serve as horizontal stabilizers, grounding our efforts in sustainable, interpersonal practice. Together, they form an ethical gyroscope for civic-technological engagement.&lt;br /&gt;
&lt;br /&gt;
== Perl’s Virtues in a Broader Programming Context ==&lt;br /&gt;
The framework developed here is intentionally anchored in Perl. Perl is unusual in having a founder who supplied the community with an explicit and memorable vocabulary of programmer “virtues,” and Wall later complicated that vocabulary by speaking of diligence, patience, and humility as complementary virtues for open-source life &amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt;. That makes Perl more than an incidental example: it is the community whose own language generated the question this paper is trying to answer.&lt;br /&gt;
&lt;br /&gt;
At the same time, the pattern is intelligible outside Perl. Programming communities routinely encode judgments about good practice in slogans, style guides, design principles, review customs, release expectations, and stories about exemplary maintainers. Some emphasize readability, some minimalism, some safety, some portability, some performance, some composability. Those priorities are not identical, but they all reveal that software communities cultivate dispositions as well as techniques. They teach members not only &#039;&#039;how&#039;&#039; to make software, but what kinds of technical judgment and social conduct the community admires.&lt;br /&gt;
&lt;br /&gt;
Perl’s contribution to this wider discussion is therefore not a universal three-item code imposed on every programmer. It is a particularly vivid case study of a community discovering that the words used to celebrate technical behavior matter. If Perl can distinguish a witty vice-label from the virtue actually being praised, other communities can likewise ask whether their own slogans still name the habits they genuinely wish to cultivate. The wider applicability strengthens, rather than displaces, the Perl-centered purpose of this paper.&lt;br /&gt;
&lt;br /&gt;
== Technology Ordered Toward Human Flourishing: A Later Convergence ==&lt;br /&gt;
The central argument of this paper was developed before Robert Francis Prevost was elected Pope Leo XIV in May 2025 and before the publication of his first encyclical, &#039;&#039;Magnifica Humanitas&#039;&#039;, in May 2026 &amp;lt;ref name=&amp;quot;LeoXIVBiography&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt;. That chronology is worth stating because the argument offered here was not constructed around the encyclical. Rather, Leo XIV’s later treatment of technology provides a striking contemporary convergence with the older virtue framework already being applied to Perl: technical power is a means, and the decisive question is the human good toward which that power is ordered.&lt;br /&gt;
&lt;br /&gt;
Although &#039;&#039;Magnifica Humanitas&#039;&#039; was written in response to a period of rapid development in artificial intelligence and related technologies, its central principle is broader than AI. Leo XIV does not portray technology as inherently opposed to humanity. He treats technological development as a profoundly human activity capable of improving human life, while insisting that tools become destructive when they are not directed toward the good &amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt;. His concern is therefore not simply whether a technology works, scales, optimizes, or increases capability, but what kind of human life those powers help to build. Throughout the encyclical, the criterion repeatedly returns to the dignity of persons, the common good, integral human development, and the possibility for persons and peoples to flourish.&lt;br /&gt;
&lt;br /&gt;
For a paper about programmer virtue, this is the important point. Technical excellence is real, but it is a subordinate good. Efficiency, automation, expressive power, elegant abstractions, sophisticated tooling, and even the survival of a programming language are not final ends in themselves. Their value is finally measured by the good they enable human beings and communities to pursue.&lt;br /&gt;
&lt;br /&gt;
=== Leo XIV, Leo XIII, St. Thomas, and Aristotle ===&lt;br /&gt;
Leo XIV himself places this technological moment in continuity with Leo XIII. In &#039;&#039;Magnifica Humanitas&#039;&#039;, he explicitly recalls the &#039;&#039;res novae&#039;&#039;—the “new things”—that confronted Leo XIII during the industrial transformation addressed in &#039;&#039;Rerum Novarum&#039;&#039;, and argues that the Church must likewise interpret the “new things” of the present technological age &amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;LeoXIII1891&amp;quot; /&amp;gt;. The analogy is especially apt because neither pontificate begins by asking whether a new technology or economic power is simply good or bad. The deeper question is how new forms of power affect human persons, relationships, work, responsibility, and the common good.&lt;br /&gt;
&lt;br /&gt;
The line can be traced farther back without pretending that every document is merely a restatement of the one before it. Leo XIII’s pontificate deliberately restored St. Thomas Aquinas to a central place in Catholic philosophical formation in &#039;&#039;Aeterni Patris&#039;&#039; &amp;lt;ref name=&amp;quot;LeoXIII1879&amp;quot; /&amp;gt;. Thomas, in turn, received and transformed much of Aristotle’s moral philosophy. His account of prudence as reason rightly governing action openly draws on Aristotle’s treatment of practical wisdom &amp;lt;ref name=&amp;quot;AquinasST&amp;quot; /&amp;gt; &amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot; /&amp;gt;. Aristotle’s ethical inquiry itself is ordered toward &#039;&#039;eudaimonia&#039;&#039;: the flourishing life that gives individual virtues their place within a larger account of human good.&lt;br /&gt;
&lt;br /&gt;
The resulting intellectual sequence is useful for the present argument:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Aristotle → St. Thomas Aquinas → Leo XIII → Leo XIV&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Aristotle supplies a durable language of virtue, practical wisdom, ends, and flourishing. St. Thomas integrates that moral vocabulary into a broader account of human action and the good. Leo XIII brings a Thomistic intellectual orientation to a pontificate confronting the social consequences of industrial modernity. Leo XIV consciously returns to Leo XIII’s &#039;&#039;res novae&#039;&#039; at another moment of technological transformation and again asks whether human powers are being ordered toward the flourishing of persons and communities. This is an intellectual inheritance rather than a claim of simple one-to-one textual dependence, but the continuity of the question is clear: &#039;&#039;what are our powers for?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== A Perl Application: The Tool Is Not the End ===&lt;br /&gt;
The author writes as both a Catholic and a Perl programmer, so this lineage is not external decoration added to a technical culture from somewhere else; it is part of the intellectual vocabulary through which the author understands craftsmanship, community, and responsibility. Nevertheless, the application to Perl does not require a reader to be Catholic. The claim is practical and broadly accessible: technology is a tool, and tools should be judged in part by the human goods they serve.&lt;br /&gt;
&lt;br /&gt;
Perl is itself a tool-building culture. The language, CPAN, test frameworks, automation, compilers, editors, deployment systems, and newer AI-assisted tools all extend human capability. Any of them can be used well or badly. AI is only one contemporary example. The principle applies just as readily to a regular expression, a build system, a package index, a web framework, or a programming language: increased power does not tell us what the power is for.&lt;br /&gt;
&lt;br /&gt;
This is where the proposed Perl virtues become especially useful. &#039;&#039;Practical Wisdom&#039;&#039; asks whether a technical choice serves the real problem and the people who live with the solution. &#039;&#039;Spiritedness&#039;&#039; supplies the energy to improve tools when they fail those people. &#039;&#039;Good Order&#039;&#039; leaves code and institutions in a form others can inherit. Wall’s complementary virtues of &#039;&#039;Diligence&#039;&#039;, &#039;&#039;Patience&#039;&#039;, and &#039;&#039;Humility&#039;&#039; keep technical power from becoming self-regarding: they remind the contributor that maintenance matters, that people learn and collaborate at human speeds, and that no single programmer’s cleverness exhausts what a project may need &amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Seen this way, human flourishing is not an ornamental concept placed beside programming. It supplies the end that gives programmer virtue its direction. A Perl project flourishes when people can solve real problems, learn from one another, earn trust, maintain what they inherit, welcome useful contributions, and pass knowledge forward. Even the desire to keep Perl vigorous for another generation is best understood in this way: the language matters because of the human work, relationships, creativity, livelihoods, service, and learning it makes possible. The tool is important; the people and the goods they pursue are the reason for the tool.&lt;br /&gt;
&lt;br /&gt;
== When Virtues Go Mad: A Chestertonian Warning ==&lt;br /&gt;
G. K. Chesterton observed that virtues become dangerous when they become detached from one another and “go mad” &amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot; /&amp;gt;. The same warning applies to the virtues proposed here. A complementary point is that a virtue can fail not only through excess, but through deficiency. The Perl community therefore benefits from examining both edges of each virtue rather than merely replacing one provocative vice-label with a more respectable word.&lt;br /&gt;
&lt;br /&gt;
=== Practical Wisdom Between Shortsightedness and Overthinking ===&lt;br /&gt;
Practical Wisdom fails through deficiency when contributors repeatedly solve only the immediate problem: manual work is needlessly repeated, local fixes accumulate, documentation is deferred forever, and nobody considers the future maintainer. It fails through excess when deliberation becomes an end in itself: architectures are designed for hypothetical futures, abstractions multiply faster than users, and “best practice” becomes a reason that no imperfect but useful solution may ship.&lt;br /&gt;
&lt;br /&gt;
The virtuous mean is not mediocrity. It is proportionate judgment—enough foresight to reduce needless future cost, enough restraint to keep the solution answerable to the problem that actually exists.&lt;br /&gt;
&lt;br /&gt;
=== Spiritedness Between Apathy and Combativeness ===&lt;br /&gt;
Spiritedness fails through deficiency when a contributor simply stops caring. Bugs linger because they are someone else’s problem; newcomers go unanswered; a useful distribution decays because nobody feels responsible for it; a damaging assumption survives because challenging it would require effort. Open source cannot flourish on indifference.&lt;br /&gt;
&lt;br /&gt;
The excessive form is equally familiar: urgency becomes contempt, technical disagreement becomes moral combat, and advocacy becomes a personal crusade. The Perl community has always contained strong personalities and strong opinions; the virtue is not the elimination of that energy but its discipline toward repair, truth, and the good of the community.&lt;br /&gt;
&lt;br /&gt;
=== Good Order Between Neglect and Stagnation ===&lt;br /&gt;
Good Order fails through deficiency when there is no dependable structure to inherit: code is clever but opaque, release practices live only in memory, documentation is stale, ownership is unclear, and useful conventions exist only as oral tradition. Such disorder eventually makes contribution harder even for talented people.&lt;br /&gt;
&lt;br /&gt;
Good Order goes mad when structure protects itself. Processes multiply because processes already exist; stylistic purity outweighs usefulness; governance becomes inaccessible to newcomers; experimentation is treated as a threat. What began as an attempt to make collaboration easier can become a barrier to collaboration. The right kind of order is therefore ordered again toward people and useful work.&lt;br /&gt;
&lt;br /&gt;
=== Why Both Extremes Matter ===&lt;br /&gt;
Deficiencies are often easier to recognize because something visibly fails to happen: a bug is not fixed, a module is not maintained, documentation is not written. Excesses can be more dangerous precisely because they can masquerade as excellence. Over-engineering can call itself wisdom; aggression can call itself commitment; bureaucracy can call itself quality. Naming the virtue correctly is therefore only the beginning. The community must also remember the end for which the virtue exists.&lt;br /&gt;
&lt;br /&gt;
Balanced together, Practical Wisdom, Spiritedness, and Good Order form a stable foundation for Perl craftsmanship and community stewardship. Diligence, Patience, and Humility help keep those powers integrated. The goal is not to make Perl programmers less energetic, less ingenious, or less opinionated. It is to direct those strengths toward work and relationships in which people can flourish.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
This remains, deliberately, a paper for the Perl community. Its starting point is Larry Wall’s language, its examples come from Perl project and community life, and its practical hope is that Perl programmers will speak more accurately about the habits they wish to cultivate. Wall’s famous &#039;&#039;laziness&#039;&#039;, &#039;&#039;impatience&#039;&#039;, and &#039;&#039;hubris&#039;&#039; remain memorable jokes and useful cultural shorthand, but the behaviors he actually praised are better described as &#039;&#039;Practical Wisdom&#039;&#039;, &#039;&#039;Spiritedness&#039;&#039;, and &#039;&#039;Good Order&#039;&#039;. His later appeal to &#039;&#039;Diligence&#039;&#039;, &#039;&#039;Patience&#039;&#039;, and &#039;&#039;Humility&#039;&#039; supplies an important complementary set of virtues for sustaining those powers in open-source community life &amp;lt;ref name=&amp;quot;wall1999&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dr. Christos Argyropoulos’s suggestion to examine the extremes and make the argument intelligible beyond a single language strengthens rather than weakens this Perl focus. Perl becomes a case study that outsiders can understand precisely because its community has spoken so explicitly about programmer character. Other communities may recognize analogous questions in their own cultures, but Perl remains the home of the argument.&lt;br /&gt;
&lt;br /&gt;
The later convergence with Pope Leo XIV’s &#039;&#039;Magnifica Humanitas&#039;&#039; adds one final perspective. This essay’s central claim predates both Leo XIV’s election and his encyclical, yet his insistence that technological power be ordered toward human dignity, the common good, and human flourishing gives contemporary expression to a very old principle &amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot; /&amp;gt;. From Aristotle’s &#039;&#039;eudaimonia&#039;&#039;, through St. Thomas’s account of prudence, through Leo XIII’s response to the industrial &#039;&#039;res novae&#039;&#039;, to Leo XIV’s response to the technological &#039;&#039;res novae&#039;&#039;, the recurring question is not simply what human beings are capable of building, but what those capabilities are for.&lt;br /&gt;
&lt;br /&gt;
That question belongs in Perl as surely as it belongs anywhere else technology is made. Perl is a language, an ecosystem, and a collection of powerful tools, but its highest value is realized through the people who use those tools to solve problems, create, teach, maintain, serve, earn livelihoods, build institutions, and help one another. There are many virtues that can benefit the Perl community as it moves forward, but a good beginning is to name clearly the ones already hiding in plain sight. Thank you, Larry Wall.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
The author is especially grateful to Dr. Christos Argyropoulos for his thoughtful review of this paper. Although he identified no material defects in the original argument, his recommendation to expand the treatment of the virtues through examples of their extremes, and to make the framework intelligible beyond Perl without losing its Perl roots, materially strengthened the present revision. His comments prompted the more explicit deficiency–virtue–excess analysis and helped clarify how the Perl community’s distinctive vocabulary can contribute to a wider conversation about technical character and stewardship.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Wall1996&amp;quot;&amp;gt;Larry Wall, Tom Christiansen, and Randal L. Schwartz, &#039;&#039;Programming Perl&#039;&#039;, 2nd ed. (O&#039;Reilly &amp;amp;amp; Associates, 1996). Wall&#039;s definitions of laziness, impatience, and hubris are reproduced in many Perl references; see also [https://thethreevirtues.com/ The Three Virtues of a GREAT Programmer].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Aristotle1999&amp;quot;&amp;gt;Aristotle, &#039;&#039;Nicomachean Ethics&#039;&#039;, translated with introduction, notes, and glossary by Terence Irwin, 2nd ed. (Hackett Publishing Company, 1999).&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;AquinasST&amp;quot;&amp;gt;St. Thomas Aquinas, &#039;&#039;Summa Theologiae&#039;&#039;, especially II-II, q. 47, on prudence. [https://www.newadvent.org/summa/3047.htm Online edition].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Chesterton1908&amp;quot;&amp;gt;G. K. Chesterton, &#039;&#039;Orthodoxy&#039;&#039; (1908), especially the discussion of virtues that become isolated and “go mad.” [https://ccel.org/ccel/chesterton/orthodoxy.vi.html Online text].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;wall1999&amp;quot;&amp;gt;Larry Wall, “Diligence, Patience, and Humility,” in &#039;&#039;Open Sources: Voices from the Open Source Revolution&#039;&#039; (O&#039;Reilly, 1999). [https://www.oreilly.com/openbook/opensources/book/larry.html Online text].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIVBiography&amp;quot;&amp;gt;The Holy See, [https://www.vatican.va/content/leo-xiv/en/biography/documents/biografia_leone-xiv.html “Biography of the Holy Father Leo XIV”].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIV2026&amp;quot;&amp;gt;Pope Leo XIV, [https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html &#039;&#039;Magnifica Humanitas: On Safeguarding the Human Person in the Time of Artificial Intelligence&#039;&#039;], 15 May 2026; promulgated 25 May 2026.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1891&amp;quot;&amp;gt;Pope Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_15051891_rerum-novarum.html &#039;&#039;Rerum Novarum: On Capital and Labor&#039;&#039;], 15 May 1891.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;LeoXIII1879&amp;quot;&amp;gt;Pope Leo XIII, [https://www.vatican.va/content/leo-xiii/en/encyclicals/documents/hf_l-xiii_enc_04081879_aeterni-patris.html &#039;&#039;Aeterni Patris: On the Restoration of Christian Philosophy&#039;&#039;], 4 August 1879.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related:&#039;&#039;&#039; [[The Real 3 Virtues of Perl]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Virtuous Programmer Initiative]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=390</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=390"/>
		<updated>2026-09-06T04:15:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the Virtuous Programmer Initiative ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Virtuous Programmer Initiative&#039;&#039;&#039; is broader than any one technology or programming language, although its present work is rooted particularly in Perl and the Perl community.&lt;br /&gt;
&lt;br /&gt;
Its purpose is to explore what makes a good programmer not merely technically capable, but prudent in judgment, spirited in the pursuit of worthy work, orderly in craftsmanship and stewardship, diligent in execution, patient with people and difficult problems, and humble before truth and the contributions of others.&lt;br /&gt;
&lt;br /&gt;
The Initiative includes philosophical essays, technical case studies, professional-development material, and practical applications of programmer virtue to such subjects as open source, maintenance, artificial intelligence, apprenticeship, commerce, and software craftsmanship.&lt;br /&gt;
&lt;br /&gt;
= Essays about The Virtuous Perl Programmer =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Virtuous Perl Programmer&#039;&#039;&#039; series considers programming as a human craft ordered toward truth, useful service, justice, stewardship, and human flourishing.&lt;br /&gt;
&lt;br /&gt;
The essays begin from the three virtues proposed in [[The Real 3 Virtues of Perl]]:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Practical Wisdom or Prudence, not Laziness&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Spiritedness, not Impatience&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Good Order, not Hubris&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
They also consider Larry Wall&#039;s complementary open-source virtues of &#039;&#039;&#039;Diligence, Patience, and Humility&#039;&#039;&#039;, and apply these virtues to programming, maintenance, open-source communities, commerce, artificial intelligence, craftsmanship, and the formation of future programmers.&lt;br /&gt;
&lt;br /&gt;
Some essays are primarily philosophical or moral. Others follow practical technical journeys in which the virtues are applied to real software development.&lt;br /&gt;
&lt;br /&gt;
== Foundational Essays on Programmer Virtue ==&lt;br /&gt;
&lt;br /&gt;
These essays consider programmer virtue directly, apart from any particular toolkit or development environment.&lt;br /&gt;
&lt;br /&gt;
* [[The Real 3 Virtues of Perl]]&lt;br /&gt;
* [[Open Sourcing the Virtues of a Perl Programmer]]&lt;br /&gt;
* &#039;&#039;Forthcoming essays may include:&#039;&#039;&lt;br /&gt;
** [[Prudence and Technical Judgment]]&lt;br /&gt;
** [[Spiritedness Without Impatience]]&lt;br /&gt;
** [[Good Order Without Bureaucracy]]&lt;br /&gt;
** [[Diligence, Patience, and Humility in Open Source]]&lt;br /&gt;
** [[When Programmer Virtues Go Mad]]&lt;br /&gt;
** [[The Virtuous Programmer and Artificial Intelligence]]&lt;br /&gt;
** [[The Dignity of the Programmer and the Dignity of Work]]&lt;br /&gt;
** [[The Master and the Apprentice]]&lt;br /&gt;
** [[Virtue, Maintenance, and the Work Nobody Sees]]&lt;br /&gt;
** [[The Programmer, the Customer, and Just Exchange]]&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
This sequence applies the virtues of the Perl programmer to a concrete technical goal: building complete, distributable Windows applications with Perl.&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
#: &#039;&#039;Moving from generated layout code to a maintainable application with clear event handling and separation of concerns.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
&lt;br /&gt;
== Other Technical Applications of Programmer Virtue ==&lt;br /&gt;
&lt;br /&gt;
Future essays may apply the same framework to:&lt;br /&gt;
&lt;br /&gt;
* open-source maintenance;&lt;br /&gt;
* code review;&lt;br /&gt;
* testing;&lt;br /&gt;
* APIs and backward compatibility;&lt;br /&gt;
* artificial intelligence;&lt;br /&gt;
* software licensing;&lt;br /&gt;
* documentation;&lt;br /&gt;
* release engineering;&lt;br /&gt;
* security;&lt;br /&gt;
* system administration;&lt;br /&gt;
* scientific programming;&lt;br /&gt;
* consulting and professional practice;&lt;br /&gt;
* and the formation of new programmers.&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=389</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=389"/>
		<updated>2026-09-06T04:14:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Essays about The Virtuous Perl Programmer =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Virtuous Perl Programmer&#039;&#039;&#039; series considers programming as a human craft ordered toward truth, useful service, justice, stewardship, and human flourishing.&lt;br /&gt;
&lt;br /&gt;
The essays begin from the three virtues proposed in [[The Real 3 Virtues of Perl]]:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Practical Wisdom or Prudence, not Laziness&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Spiritedness, not Impatience&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Good Order, not Hubris&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
They also consider Larry Wall&#039;s complementary open-source virtues of &#039;&#039;&#039;Diligence, Patience, and Humility&#039;&#039;&#039;, and apply these virtues to programming, maintenance, open-source communities, commerce, artificial intelligence, craftsmanship, and the formation of future programmers.&lt;br /&gt;
&lt;br /&gt;
Some essays are primarily philosophical or moral. Others follow practical technical journeys in which the virtues are applied to real software development.&lt;br /&gt;
&lt;br /&gt;
== Foundational Essays on Programmer Virtue ==&lt;br /&gt;
&lt;br /&gt;
These essays consider programmer virtue directly, apart from any particular toolkit or development environment.&lt;br /&gt;
&lt;br /&gt;
* [[The Real 3 Virtues of Perl]]&lt;br /&gt;
* [[Open Sourcing the Virtues of a Perl Programmer]]&lt;br /&gt;
* &#039;&#039;Forthcoming essays may include:&#039;&#039;&lt;br /&gt;
** [[Prudence and Technical Judgment]]&lt;br /&gt;
** [[Spiritedness Without Impatience]]&lt;br /&gt;
** [[Good Order Without Bureaucracy]]&lt;br /&gt;
** [[Diligence, Patience, and Humility in Open Source]]&lt;br /&gt;
** [[When Programmer Virtues Go Mad]]&lt;br /&gt;
** [[The Virtuous Programmer and Artificial Intelligence]]&lt;br /&gt;
** [[The Dignity of the Programmer and the Dignity of Work]]&lt;br /&gt;
** [[The Master and the Apprentice]]&lt;br /&gt;
** [[Virtue, Maintenance, and the Work Nobody Sees]]&lt;br /&gt;
** [[The Programmer, the Customer, and Just Exchange]]&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
This sequence applies the virtues of the Perl programmer to a concrete technical goal: building complete, distributable Windows applications with Perl.&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
#: &#039;&#039;Moving from generated layout code to a maintainable application with clear event handling and separation of concerns.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
&lt;br /&gt;
== Other Technical Applications of Programmer Virtue ==&lt;br /&gt;
&lt;br /&gt;
Future essays may apply the same framework to:&lt;br /&gt;
&lt;br /&gt;
* open-source maintenance;&lt;br /&gt;
* code review;&lt;br /&gt;
* testing;&lt;br /&gt;
* APIs and backward compatibility;&lt;br /&gt;
* artificial intelligence;&lt;br /&gt;
* software licensing;&lt;br /&gt;
* documentation;&lt;br /&gt;
* release engineering;&lt;br /&gt;
* security;&lt;br /&gt;
* system administration;&lt;br /&gt;
* scientific programming;&lt;br /&gt;
* consulting and professional practice;&lt;br /&gt;
* and the formation of new programmers.&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=388</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=388"/>
		<updated>2026-09-06T04:03:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance and independent Perl programmers&#039;&#039;&#039; and help them thrive in their trades. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki. It is the home of the The Virtuous Programmer Initiative.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; border:2px solid #6b4e2e; background:#fffaf0; margin:1em 0; padding:0.4em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:100px; text-align:center; vertical-align:top; padding:0.7em;&amp;quot; | [[File:NewUserLogo.png|88px|link=Portal:Essays about The Virtuous Perl Programmer|alt=The Virtuous Perl Programmer essay series]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top; padding:0.7em 1em;&amp;quot; |&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Featured Series: [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This long-form essay series follows the Perl programmer as craftsman: from the potentially weary journeyman or master seeking renewed work, to the prospective apprentice who has not yet discovered the trade. Its current technical journey develops a complete Windows wxPerl workshop and follows the work from a Perl idea to a graphical application, executable, installer, and supportable product.&lt;br /&gt;
&lt;br /&gt;
The essays apply &#039;&#039;&#039;Prudence&#039;&#039;&#039;, &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, and &#039;&#039;&#039;Good Order&#039;&#039;&#039; to real technical decisions without separating craftsmanship from truth, justice, the dignity of workers, service to users, or the proper use of talents received from God.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Begin the journey:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
# [[The Perl Lazarus Workshop]]&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
God is the Creator and the source of every good gift and talent. The programmer does not create from nothing; he receives intelligence, opportunity, tools, knowledge, and the labor of earlier craftsmen, and is responsible for developing these gifts and ordering them toward truthful service.&lt;br /&gt;
&lt;br /&gt;
Mastery therefore carries obligations. The apprentice, journeyman, master, customer, and user possess the same God-given dignity, while greater skill creates greater duties of justice, humility, patience, stewardship, and care.&lt;br /&gt;
&lt;br /&gt;
The [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer essays]] apply these principles to the daily work of programming: choosing tools, forming apprentices, using AI, respecting licenses, protecting users, earning a just livelihood, and bringing software to completion.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:Essays about The Virtuous Perl Programmer|[[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]]&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals who charge money for Perl-related services, and for those preparing to do so.&#039;&#039;&#039; Perl may be the visible product, the server-side foundation, or the craftsman&#039;s secret weapon.&lt;br /&gt;
&lt;br /&gt;
This is not a celebration of being a careless &amp;quot;jack of all trades.&amp;quot; It is a place for apprentices, journeymen, and masters who wish to cultivate real specialties, serve users well, support their families, and earn a just and sustainable livelihood through useful labor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Featured Technical Journey&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
  ** [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
  ** [[The Perl Lazarus Workshop]]&lt;br /&gt;
  ** [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
  ** &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Complete wxPerl-on-Windows technical reference]]&lt;br /&gt;
* [[:Category:Perl Lazarus Project|Perl Lazarus Project category]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[ServiceProviders|Perl service providers and craftsmen]]&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Portal:Software Development Tools|Software Development Tools]]&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
* [[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv — join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://strawberryperl.com/ Strawberry Perl] — native Perl and build environment for Windows&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] — written in Python, but can output Perl&lt;br /&gt;
* [https://www.msys2.org/ MSYS2] — Unix-like editing, Git, SSH, and shell environment for Windows&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] — professional Windows installer builder with reasonable commercial licensing terms&lt;br /&gt;
* [[Perl and wxWidgets RAD on Windows|History of Perl and wxWidgets RAD tools on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [[GUI ideas for use with wxGlade]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
* [https://perlclientdirectory.com/ Perl Client Directory]&lt;br /&gt;
* Desktop wxPerl clients may complement Perl web applications, APIs, databases, and hosted processing services.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Payment Processing]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
* Application sales, site licenses, paid customization, migration, support, maintenance, training, hosting, and consulting&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Projects using Perl]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)|Perl Powered Programs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads and Source Code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild The Perl Cottage Guild on GitHub]&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer]&lt;br /&gt;
* [[:Category:Code|Code on this wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] — test forum to see if any activity is drawn to it&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues Wiki requests and issue tracker]&lt;br /&gt;
* [[ServiceProviders|Service-provider listings]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books, Magazines, and Long-Form Writing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer essays]]&lt;br /&gt;
* The essay series is being developed incrementally as a future book-length treatment of virtuous craftsmanship and marketable wxPerl application development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ — curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net — track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:Category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=387</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=387"/>
		<updated>2026-07-20T09:15:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance and independent Perl programmers&#039;&#039;&#039; and help them thrive in their trades. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; border:2px solid #6b4e2e; background:#fffaf0; margin:1em 0; padding:0.4em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:100px; text-align:center; vertical-align:top; padding:0.7em;&amp;quot; | [[File:NewUserLogo.png|88px|link=Portal:Essays about The Virtuous Perl Programmer|alt=The Virtuous Perl Programmer essay series]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top; padding:0.7em 1em;&amp;quot; |&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Featured Series: [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This long-form essay series follows the Perl programmer as craftsman: from the potentially weary journeyman or master seeking renewed work, to the prospective apprentice who has not yet discovered the trade. Its current technical journey develops a complete Windows wxPerl workshop and follows the work from a Perl idea to a graphical application, executable, installer, and supportable product.&lt;br /&gt;
&lt;br /&gt;
The essays apply &#039;&#039;&#039;Prudence&#039;&#039;&#039;, &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, and &#039;&#039;&#039;Good Order&#039;&#039;&#039; to real technical decisions without separating craftsmanship from truth, justice, the dignity of workers, service to users, or the proper use of talents received from God.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Begin the journey:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
# [[The Perl Lazarus Workshop]]&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
God is the Creator and the source of every good gift and talent. The programmer does not create from nothing; he receives intelligence, opportunity, tools, knowledge, and the labor of earlier craftsmen, and is responsible for developing these gifts and ordering them toward truthful service.&lt;br /&gt;
&lt;br /&gt;
Mastery therefore carries obligations. The apprentice, journeyman, master, customer, and user possess the same God-given dignity, while greater skill creates greater duties of justice, humility, patience, stewardship, and care.&lt;br /&gt;
&lt;br /&gt;
The [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer essays]] apply these principles to the daily work of programming: choosing tools, forming apprentices, using AI, respecting licenses, protecting users, earning a just livelihood, and bringing software to completion.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:Essays about The Virtuous Perl Programmer|[[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]]&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals who charge money for Perl-related services, and for those preparing to do so.&#039;&#039;&#039; Perl may be the visible product, the server-side foundation, or the craftsman&#039;s secret weapon.&lt;br /&gt;
&lt;br /&gt;
This is not a celebration of being a careless &amp;quot;jack of all trades.&amp;quot; It is a place for apprentices, journeymen, and masters who wish to cultivate real specialties, serve users well, support their families, and earn a just and sustainable livelihood through useful labor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Featured Technical Journey&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
  ** [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
  ** [[The Perl Lazarus Workshop]]&lt;br /&gt;
  ** [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
  ** &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Complete wxPerl-on-Windows technical reference]]&lt;br /&gt;
* [[:Category:Perl Lazarus Project|Perl Lazarus Project category]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[ServiceProviders|Perl service providers and craftsmen]]&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Portal:Software Development Tools|Software Development Tools]]&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
* [[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv — join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://strawberryperl.com/ Strawberry Perl] — native Perl and build environment for Windows&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] — written in Python, but can output Perl&lt;br /&gt;
* [https://www.msys2.org/ MSYS2] — Unix-like editing, Git, SSH, and shell environment for Windows&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] — professional Windows installer builder with reasonable commercial licensing terms&lt;br /&gt;
* [[Perl and wxWidgets RAD on Windows|History of Perl and wxWidgets RAD tools on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [[GUI ideas for use with wxGlade]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
* [https://perlclientdirectory.com/ Perl Client Directory]&lt;br /&gt;
* Desktop wxPerl clients may complement Perl web applications, APIs, databases, and hosted processing services.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Payment Processing]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
* Application sales, site licenses, paid customization, migration, support, maintenance, training, hosting, and consulting&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Projects using Perl]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)|Perl Powered Programs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads and Source Code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild The Perl Cottage Guild on GitHub]&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer]&lt;br /&gt;
* [[:Category:Code|Code on this wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] — test forum to see if any activity is drawn to it&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues Wiki requests and issue tracker]&lt;br /&gt;
* [[ServiceProviders|Service-provider listings]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books, Magazines, and Long-Form Writing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer essays]]&lt;br /&gt;
* The essay series is being developed incrementally as a future book-length treatment of virtuous craftsmanship and marketable wxPerl application development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ — curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net — track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:Category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Git&amp;diff=386</id>
		<title>Category:Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Git&amp;diff=386"/>
		<updated>2026-07-20T07:06:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Git}}  This category contains pages concerning the use of &amp;#039;&amp;#039;&amp;#039;Git&amp;#039;&amp;#039;&amp;#039; in Perl projects.  Within the wxPerl and wxGlade workflow, Git preserves generated and handwritten source, exposes changes made during code generation, provides recoverable checkpoints, and allows the craftsman to distinguish verified work from experimentation.  &amp;#039;&amp;#039;&amp;#039;Related workflow:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  Git C...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Git}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages concerning the use of &#039;&#039;&#039;Git&#039;&#039;&#039; in Perl projects.&lt;br /&gt;
&lt;br /&gt;
Within the wxPerl and wxGlade workflow, Git preserves generated and handwritten source, exposes changes made during code generation, provides recoverable checkpoints, and allows the craftsman to distinguish verified work from experimentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Git]]&lt;br /&gt;
[[Category:Perl Lazarus Project|Git]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:MSYS2&amp;diff=385</id>
		<title>Category:MSYS2</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:MSYS2&amp;diff=385"/>
		<updated>2026-07-20T07:06:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:MSYS2}}  This category contains pages discussing the use of &amp;#039;&amp;#039;&amp;#039;MSYS2&amp;#039;&amp;#039;&amp;#039; as a Unix-like editing, Git, SSH, and shell environment for Perl development on Windows.  Within the Perl Lazarus workflow, MSYS2 complements rather than replaces Strawberry Perl. It may be used for vim, Git, source inspection, and familiar shell utilities, while wxPerl applications and packaging commands are run using the intended Strawberry Perl environment.  &amp;#039;&amp;#039;&amp;#039;Related work...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:MSYS2}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages discussing the use of &#039;&#039;&#039;MSYS2&#039;&#039;&#039; as a Unix-like editing, Git, SSH, and shell environment for Perl development on Windows.&lt;br /&gt;
&lt;br /&gt;
Within the Perl Lazarus workflow, MSYS2 complements rather than replaces Strawberry Perl. It may be used for vim, Git, source inspection, and familiar shell utilities, while wxPerl applications and packaging commands are run using the intended Strawberry Perl environment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows|MSYS2]]&lt;br /&gt;
[[Category:Perl Lazarus Project|MSYS2]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:WxGlade&amp;diff=384</id>
		<title>Category:WxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:WxGlade&amp;diff=384"/>
		<updated>2026-07-20T07:06:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:wxGlade}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;wxGlade&amp;#039;&amp;#039;&amp;#039;, a visual interface designer for wxWidgets applications.  Within the Perl Lazarus workflow, wxGlade is used to save graphical interface projects as XML and emit Perl source code for wxPerl applications. Pages may cover installation, output settings, generated-code preservation, templates, interface ideas, event wiring, and efficient edit–emit–run workflows.  &amp;#039;&amp;#039;&amp;#039;GUI ideas and examples:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:wxGlade}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;wxGlade&#039;&#039;&#039;, a visual interface designer for wxWidgets applications.&lt;br /&gt;
&lt;br /&gt;
Within the Perl Lazarus workflow, wxGlade is used to save graphical interface projects as XML and emit Perl source code for wxPerl applications. Pages may cover installation, output settings, generated-code preservation, templates, interface ideas, event wiring, and efficient edit–emit–run workflows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GUI ideas and examples:&#039;&#039;&#039; [[GUI ideas for use with wxGlade]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows wxPerl workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Template repository:&#039;&#039;&#039; [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|wxGlade]]&lt;br /&gt;
[[Category:wxPerl|wxGlade]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Strawberry_Perl&amp;diff=383</id>
		<title>Category:Strawberry Perl</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Strawberry_Perl&amp;diff=383"/>
		<updated>2026-07-20T07:06:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Strawberry Perl}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;Strawberry Perl&amp;#039;&amp;#039;&amp;#039;, the native Perl distribution for Windows used as the principal Perl and build environment in the Perl Lazarus Project.  Topics may include installation profiles, compilers, build tools, module installation, PDL distributions, environment verification, and compatibility with wxPerl and native libraries.  &amp;#039;&amp;#039;&amp;#039;Primary wxPerl installation guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Strawberry Perl}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;Strawberry Perl&#039;&#039;&#039;, the native Perl distribution for Windows used as the principal Perl and build environment in the Perl Lazarus Project.&lt;br /&gt;
&lt;br /&gt;
Topics may include installation profiles, compilers, build tools, module installation, PDL distributions, environment verification, and compatibility with wxPerl and native libraries.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary wxPerl installation guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows|Strawberry Perl]]&lt;br /&gt;
[[Category:Perl Lazarus Project|Strawberry Perl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Windows&amp;diff=382</id>
		<title>Category:Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Windows&amp;diff=382"/>
		<updated>2026-07-20T07:05:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Windows}}  This category contains pages concerning Perl development, deployment, compatibility, and application distribution on Microsoft Windows.  Relevant topics include Strawberry Perl, wxPerl, GUI development, Windows executables, installers, native DLLs, backward compatibility, and historical experiments with older Windows systems.  &amp;#039;&amp;#039;&amp;#039;Primary wxPerl guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  Category:Perl Laz...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Windows}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages concerning Perl development, deployment, compatibility, and application distribution on Microsoft Windows.&lt;br /&gt;
&lt;br /&gt;
Relevant topics include Strawberry Perl, wxPerl, GUI development, Windows executables, installers, native DLLs, backward compatibility, and historical experiments with older Windows systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary wxPerl guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:WxPerl&amp;diff=381</id>
		<title>Category:WxPerl</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:WxPerl&amp;diff=381"/>
		<updated>2026-07-20T07:04:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:wxPerl}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;wxPerl&amp;#039;&amp;#039;&amp;#039;, the Perl bindings for the wxWidgets graphical application framework.  Topics may include installation, controls, events, examples, wxGlade integration, Windows development, executable packaging, historical tools, and the creation of distributable desktop applications.  &amp;#039;&amp;#039;&amp;#039;Primary Windows guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  &amp;#039;&amp;#039;&amp;#039;Related history:&amp;#039;&amp;#039;&amp;#039; Perl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:wxPerl}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;wxPerl&#039;&#039;&#039;, the Perl bindings for the wxWidgets graphical application framework.&lt;br /&gt;
&lt;br /&gt;
Topics may include installation, controls, events, examples, wxGlade integration, Windows development, executable packaging, historical tools, and the creation of distributable desktop applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary Windows guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related history:&#039;&#039;&#039; [[Perl and wxWidgets RAD on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Perl_Guilds&amp;diff=380</id>
		<title>Category:Perl Guilds</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Perl_Guilds&amp;diff=380"/>
		<updated>2026-07-20T07:04:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Perl Guilds}}  This category contains pages related to &amp;#039;&amp;#039;&amp;#039;Perl Guilds&amp;#039;&amp;#039;&amp;#039;: its purposes, essays, projects, guilds, and efforts to support independent Perl programmers in the practice of their trade.  Perl Guilds draws upon the traditional idea of craftsmen learning, traveling, mastering a trade, forming apprentices, preserving knowledge, and supporting one another through useful work.  Its purpose is not to impose a compulsory professional organiza...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Perl Guilds}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages related to &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039;: its purposes, essays, projects, guilds, and efforts to support independent Perl programmers in the practice of their trade.&lt;br /&gt;
&lt;br /&gt;
Perl Guilds draws upon the traditional idea of craftsmen learning, traveling, mastering a trade, forming apprentices, preserving knowledge, and supporting one another through useful work.&lt;br /&gt;
&lt;br /&gt;
Its purpose is not to impose a compulsory professional organization or restrict entry into programming. It seeks to encourage voluntary associations through which Perl programmers can:&lt;br /&gt;
&lt;br /&gt;
* preserve and share practical knowledge;&lt;br /&gt;
* develop marketable specialties;&lt;br /&gt;
* form and encourage new programmers;&lt;br /&gt;
* cooperate on projects;&lt;br /&gt;
* serve users and communities;&lt;br /&gt;
* and earn a just and sustainable livelihood through their labor.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project and &#039;&#039;The Virtuous Perl Programmer&#039;&#039; essays are two expressions of this larger work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Main page:&#039;&#039;&#039; [[Main Page|Perl Guilds]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtuous Programmer essays:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perl Lazarus material:&#039;&#039;&#039; [[Category:Perl Lazarus Project]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Perl_Lazarus_Project&amp;diff=379</id>
		<title>Category:Perl Lazarus Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Perl_Lazarus_Project&amp;diff=379"/>
		<updated>2026-07-20T07:04:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Perl Lazarus Project}}  The &amp;#039;&amp;#039;&amp;#039;Perl Lazarus Project&amp;#039;&amp;#039;&amp;#039; is an effort arising from Perl Guilds to make practical Windows GUI development, packaging, and distribution available to Perl programmers through a clear and repeatable workflow.  The project joins existing tools rather than attempting to replace them with a single monolithic development environment. Its principal stack includes:  * Strawberry Perl; * wxWidgets and wxPerl; * wxGlade; * MSYS2,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Perl Lazarus Project}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Perl Lazarus Project&#039;&#039;&#039; is an effort arising from Perl Guilds to make practical Windows GUI development, packaging, and distribution available to Perl programmers through a clear and repeatable workflow.&lt;br /&gt;
&lt;br /&gt;
The project joins existing tools rather than attempting to replace them with a single monolithic development environment. Its principal stack includes:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* wxWidgets and wxPerl;&lt;br /&gt;
* wxGlade;&lt;br /&gt;
* MSYS2, vim, and Git;&lt;br /&gt;
* PAR-based executable packaging;&lt;br /&gt;
* DLL-discovery tools;&lt;br /&gt;
* and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The goal is to help a Perl programmer begin with existing Perl knowledge and end with a Windows application which an ordinary user can install, launch, and use without first reproducing the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary technical guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Essay series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Historical background:&#039;&#039;&#039; [[Perl and wxWidgets RAD on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Lazarus Project]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:The_Virtuous_Perl_Programmer&amp;diff=378</id>
		<title>Category:The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:The_Virtuous_Perl_Programmer&amp;diff=378"/>
		<updated>2026-07-20T07:04:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:The Virtuous Perl Programmer}}  This category contains essays in &amp;#039;&amp;#039;&amp;#039;The Virtuous Perl Programmer&amp;#039;&amp;#039;&amp;#039; series.  The series considers programming as a human craft ordered toward truth, useful service, just exchange, and the common good. It applies the virtues developed through Perl Guilds to the practical work of designing, building, testing, distributing, selling, and supporting software.  The current technical journey follows the Perl craftsman from...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:The Virtuous Perl Programmer}}&lt;br /&gt;
&lt;br /&gt;
This category contains essays in &#039;&#039;&#039;The Virtuous Perl Programmer&#039;&#039;&#039; series.&lt;br /&gt;
&lt;br /&gt;
The series considers programming as a human craft ordered toward truth, useful service, just exchange, and the common good. It applies the virtues developed through Perl Guilds to the practical work of designing, building, testing, distributing, selling, and supporting software.&lt;br /&gt;
&lt;br /&gt;
The current technical journey follows the Perl craftsman from an existing knowledge of Perl toward the production of complete Windows desktop applications using Strawberry Perl, wxPerl, wxGlade, packaging tools, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The essays are intended to serve both experienced Perl journeymen and masters who may be seeking a renewed field for their craft, and prospective apprentices who are only beginning to discover programming.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Main portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Virtuous Perl Programmer]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=376</id>
		<title>Raising a Working wxPerl Shop on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=376"/>
		<updated>2026-07-20T04:45:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Raising a Working wxPerl Shop on Windows}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the third essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. It follows [[The Perl Lazarus Workshop]] and moves from explaining the selected tools to assembling and using them.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A collection of tools is not yet a workshop.&lt;br /&gt;
&lt;br /&gt;
The craftsman must know where each tool belongs, how to verify that it works, and how to move from one stage of the work to the next without losing what he has already made.&lt;br /&gt;
&lt;br /&gt;
This essay will raise a practical wxPerl shop on Windows. By the end, the programmer should possess:&lt;br /&gt;
&lt;br /&gt;
* a known Strawberry Perl environment;&lt;br /&gt;
* a working installation of &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;;&lt;br /&gt;
* a visible wxPerl demonstration;&lt;br /&gt;
* wxGlade configured to emit Perl;&lt;br /&gt;
* an MSYS2 terminal with vim and Git;&lt;br /&gt;
* a small wxGlade project;&lt;br /&gt;
* generated Perl source;&lt;br /&gt;
* at least one working event;&lt;br /&gt;
* and a Git commit preserving the first successful state of the shop.&lt;br /&gt;
&lt;br /&gt;
This is not yet the construction of a commercial application. It is the preparation of the place in which such an application can be built.&lt;br /&gt;
&lt;br /&gt;
The distinction matters.&lt;br /&gt;
&lt;br /&gt;
A programmer who begins a major project before verifying the workshop may later be unable to tell whether a failure belongs to the application, the GUI design, the active Perl, the native library, the generated code, or the operating environment.&lt;br /&gt;
&lt;br /&gt;
The prudent craftsman proves each layer before placing the next one upon it.&lt;br /&gt;
&lt;br /&gt;
== What counts as a working shop? ==&lt;br /&gt;
&lt;br /&gt;
The shop is working when the entire development cycle can be repeated:&lt;br /&gt;
&lt;br /&gt;
# Open or create a wxGlade project.&lt;br /&gt;
# Change the graphical design.&lt;br /&gt;
# Emit Perl source code.&lt;br /&gt;
# Inspect the generated changes.&lt;br /&gt;
# Add or revise application behavior.&lt;br /&gt;
# Run the application with the intended Strawberry Perl.&lt;br /&gt;
# Correct the work.&lt;br /&gt;
# Preserve a known-good state in Git.&lt;br /&gt;
&lt;br /&gt;
The goal is not merely to install several programs without error messages.&lt;br /&gt;
&lt;br /&gt;
The goal is to establish a rhythm of work.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ The daily wxPerl working cycle&lt;br /&gt;
! Stage&lt;br /&gt;
! Primary tool&lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| Design&lt;br /&gt;
| wxGlade&lt;br /&gt;
| A saved &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; XML project&lt;br /&gt;
|-&lt;br /&gt;
| Emit&lt;br /&gt;
| wxGlade&lt;br /&gt;
| Perl source generated from the visual design&lt;br /&gt;
|-&lt;br /&gt;
| Inspect and edit&lt;br /&gt;
| vim under MSYS2&lt;br /&gt;
| Reviewed source and handwritten behavior&lt;br /&gt;
|-&lt;br /&gt;
| Run&lt;br /&gt;
| Strawberry Perl terminal&lt;br /&gt;
| The actual wxPerl application&lt;br /&gt;
|-&lt;br /&gt;
| Compare and preserve&lt;br /&gt;
| Git under MSYS2&lt;br /&gt;
| A diff and recoverable checkpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The distinction between these environments will be repeated throughout this essay because it prevents one of the most confusing failures in the workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Use MSYS2 to edit and manage the project, but run the wxPerl application using Strawberry Perl.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MSYS2 may have its own Perl. That Perl is not the Perl against which the selected wxPerl stack was built.&lt;br /&gt;
&lt;br /&gt;
== Begin with a tested profile ==&lt;br /&gt;
&lt;br /&gt;
A craftsman may enjoy experimenting with the newest tools, but he should first establish a known working reference point.&lt;br /&gt;
&lt;br /&gt;
The living version matrix is maintained at [[Developing and Distributing wxPerl Applications on Windows#More Specific Version Combinations with Detailed Instructions &amp;amp; Links|Developing and Distributing wxPerl Applications on Windows]]. At the time this essay was prepared, the documented profiles included:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Selected wxPerl installation profiles&lt;br /&gt;
! Status&lt;br /&gt;
! Strawberry Perl&lt;br /&gt;
! &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;&lt;br /&gt;
! &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;&lt;br /&gt;
! Use&lt;br /&gt;
|-&lt;br /&gt;
| Previously tested reference&lt;br /&gt;
| 5.40.2.1, 64-bit UCRT MSI&lt;br /&gt;
| 0.71&lt;br /&gt;
| 3.008&lt;br /&gt;
| The safer starting point for reproducing the established workflow&lt;br /&gt;
|-&lt;br /&gt;
| Newer PDL-oriented profile&lt;br /&gt;
| 5.42.2.1, 64-bit UCRT PDL ZIP&lt;br /&gt;
| 0.73&lt;br /&gt;
| 3.009&lt;br /&gt;
| A newer path which should be treated according to the current verification status on the wiki&lt;br /&gt;
|-&lt;br /&gt;
| Archived reference&lt;br /&gt;
| 5.40.0.1, 64-bit UCRT MSI&lt;br /&gt;
| 0.70&lt;br /&gt;
| 3.005&lt;br /&gt;
| Historical comparison and regression troubleshooting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The exact versions will change. This essay therefore explains the process using the previously tested 5.40.2.1 profile, while the maintained installation page remains authoritative for current links and newly verified combinations.&lt;br /&gt;
&lt;br /&gt;
A tested profile is not a claim that newer software is bad.&lt;br /&gt;
&lt;br /&gt;
It is a statement about evidence.&lt;br /&gt;
&lt;br /&gt;
The programmer who chooses an experimental profile should record that decision. He should not later describe the result as though it had received the same testing as the reference profile.&lt;br /&gt;
&lt;br /&gt;
== Prepare a work record before installing anything ==&lt;br /&gt;
&lt;br /&gt;
Create a plain-text file named:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxperl-environment.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Record:&lt;br /&gt;
&lt;br /&gt;
* the date;&lt;br /&gt;
* Windows edition and version;&lt;br /&gt;
* whether the system is 64-bit;&lt;br /&gt;
* the selected Strawberry Perl profile;&lt;br /&gt;
* the selected &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; version;&lt;br /&gt;
* the selected &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; version;&lt;br /&gt;
* the wxGlade version;&lt;br /&gt;
* the Python version used by wxGlade;&lt;br /&gt;
* the MSYS2 installation date;&lt;br /&gt;
* and links to the instructions followed.&lt;br /&gt;
&lt;br /&gt;
This file is not bureaucracy.&lt;br /&gt;
&lt;br /&gt;
It is a record of the workshop at the moment it was built. Six months later, when another machine behaves differently, the file may be more useful than memory.&lt;br /&gt;
&lt;br /&gt;
Create a directory for installation logs as well:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\wxperl-shop\logs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installation BAT file being developed for the Perl Lazarus Project should eventually automate much of this work. It should preserve the same order and should make each stage visible:&lt;br /&gt;
&lt;br /&gt;
# identify the selected profile;&lt;br /&gt;
# run one installation stage;&lt;br /&gt;
# preserve its output;&lt;br /&gt;
# stop clearly when that stage fails;&lt;br /&gt;
# verify the result;&lt;br /&gt;
# and continue only when the layer beneath it is sound.&lt;br /&gt;
&lt;br /&gt;
The batch file should preserve successful labor. It should not turn the installation into an unknowable ritual.&lt;br /&gt;
&lt;br /&gt;
The manual steps remain important because they allow the craftsman to understand and repair the automated process.&lt;br /&gt;
&lt;br /&gt;
== Install Strawberry Perl ==&lt;br /&gt;
&lt;br /&gt;
For the previously tested profile, use the instructions at:&lt;br /&gt;
&lt;br /&gt;
* [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1]]&lt;br /&gt;
&lt;br /&gt;
The documented installer is the 64-bit UCRT MSI distribution of Strawberry Perl 5.40.2.1.&lt;br /&gt;
&lt;br /&gt;
Run the installer normally. When it completes, close any command windows which were already open. A terminal started before installation may not see the updated &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Start menu → Strawberry Perl → Perl (command line)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should produce an ordinary Windows command prompt prepared for Strawberry Perl.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where perl&lt;br /&gt;
perl -v&lt;br /&gt;
perl -V:archname&lt;br /&gt;
perl -V:cc&lt;br /&gt;
where gcc&lt;br /&gt;
where gmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt; reported by &amp;lt;code&amp;gt;where perl&amp;lt;/code&amp;gt; should be the intended Strawberry Perl executable, normally under a path resembling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Strawberry\perl\bin\perl.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact compiler version is less important than proving that Strawberry Perl&#039;s compiler and build tools are available.&lt;br /&gt;
&lt;br /&gt;
Save the output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where perl                         &amp;gt;  C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -v                           &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -V:archname                  &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -V:cc                        &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
where gcc                         &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
where gmake                       &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not proceed until the intended Perl is clear.&lt;br /&gt;
&lt;br /&gt;
A large number of Windows development failures are not failures of the language or module under examination. They are failures to identify which executable is actually running.&lt;br /&gt;
&lt;br /&gt;
== Install Alien::wxWidgets ==&lt;br /&gt;
&lt;br /&gt;
Remain in the Strawberry Perl command-line window.&lt;br /&gt;
&lt;br /&gt;
For the tested profile, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/perl-Alien-wxWidgets/releases/download/R0.71/Alien-wxWidgets-0.71.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Preserve the output if practical:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/perl-Alien-wxWidgets/releases/download/R0.71/Alien-wxWidgets-0.71.tar.gz &amp;gt; C:\wxperl-shop\logs\alien-wxwidgets-install.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stage may require time. Native libraries and build configuration are involved.&lt;br /&gt;
&lt;br /&gt;
Do not mistake a quiet period for certain failure. Do not mistake a long stream of compiler output for success either.&lt;br /&gt;
&lt;br /&gt;
Wait for the final result.&lt;br /&gt;
&lt;br /&gt;
Then verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MAlien::wxWidgets -e &amp;quot;print qq{Alien::wxWidgets $Alien::wxWidgets::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this profile, the output should identify version 0.71.&lt;br /&gt;
&lt;br /&gt;
If Perl reports that the module cannot be found, do not attempt to install &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; repeatedly in the hope that the missing layer will repair itself. Read the log and correct this stage first.&lt;br /&gt;
&lt;br /&gt;
== Install Wx / wxPerl ==&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; is installed and can be loaded, install the Perl binding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/wxPerl/releases/download/R3.008/Wx-3.008.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To preserve the complete output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/wxPerl/releases/download/R3.008/Wx-3.008.tar.gz &amp;gt; C:\wxperl-shop\logs\wxperl-install.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MWx -e &amp;quot;print qq{Wx $Wx::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The selected profile should report:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Wx 3.008&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also verify both layers in one command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MAlien::wxWidgets -MWx -e &amp;quot;print qq{Alien::wxWidgets $Alien::wxWidgets::VERSION\nWx $Wx::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A successful module load is important, but it is not yet a complete graphical test.&lt;br /&gt;
&lt;br /&gt;
The binding must create an application and enter the Windows event loop.&lt;br /&gt;
&lt;br /&gt;
== Run a minimal hand-written wxPerl application ==&lt;br /&gt;
&lt;br /&gt;
Create:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\wxperl-shop\hello-wx.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use Wx;&lt;br /&gt;
&lt;br /&gt;
package HelloWxApp;&lt;br /&gt;
use parent &#039;Wx::App&#039;;&lt;br /&gt;
&lt;br /&gt;
sub OnInit {&lt;br /&gt;
    my ($self) = @_;&lt;br /&gt;
&lt;br /&gt;
    my $frame = Wx::Frame-&amp;gt;new(&lt;br /&gt;
        undef,&lt;br /&gt;
        -1,&lt;br /&gt;
        &#039;The Perl Lazarus Workshop&#039;,&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    $frame-&amp;gt;SetSize(640, 360);&lt;br /&gt;
    $frame-&amp;gt;Centre();&lt;br /&gt;
    $frame-&amp;gt;Show(1);&lt;br /&gt;
&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
my $app = HelloWxApp-&amp;gt;new();&lt;br /&gt;
$app-&amp;gt;MainLoop();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run it from the Strawberry Perl terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\wxperl-shop&lt;br /&gt;
perl hello-wx.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A blank frame titled “The Perl Lazarus Workshop” should appear.&lt;br /&gt;
&lt;br /&gt;
This small program proves several things at once:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl is active.&lt;br /&gt;
* &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; can be loaded.&lt;br /&gt;
* The native wxWidgets libraries can be found.&lt;br /&gt;
* A Windows frame can be created.&lt;br /&gt;
* The event loop can run.&lt;br /&gt;
* The application can close normally.&lt;br /&gt;
&lt;br /&gt;
Do not dismiss the blank window as trivial.&lt;br /&gt;
&lt;br /&gt;
It is the first physical proof that the shop has been raised.&lt;br /&gt;
&lt;br /&gt;
== Install and run Wx::Demo ==&lt;br /&gt;
&lt;br /&gt;
The next verification is broader.&lt;br /&gt;
&lt;br /&gt;
From the Strawberry Perl terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose Wx::Demo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxperl_demo.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; provides working examples of controls and facilities exposed through wxPerl. It is both a verification program and an early reference catalog.&lt;br /&gt;
&lt;br /&gt;
Spend some time opening examples.&lt;br /&gt;
&lt;br /&gt;
Look at:&lt;br /&gt;
&lt;br /&gt;
* buttons and text controls;&lt;br /&gt;
* list and tree controls;&lt;br /&gt;
* notebooks;&lt;br /&gt;
* menus;&lt;br /&gt;
* dialogs;&lt;br /&gt;
* drawing examples;&lt;br /&gt;
* timers;&lt;br /&gt;
* and event handling.&lt;br /&gt;
&lt;br /&gt;
The purpose is not to memorize the entire toolkit. It is to understand that wxPerl is larger than the blank frame and that many common interface patterns already have working examples.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;hello-wx.pl&amp;lt;/code&amp;gt; runs but &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; does not, the error is narrower than it would have been without the first test. The core binding works; the problem lies in the additional module, its scripts, or its dependencies.&lt;br /&gt;
&lt;br /&gt;
This is why the craftsman tests in layers.&lt;br /&gt;
&lt;br /&gt;
== Install wxGlade ==&lt;br /&gt;
&lt;br /&gt;
[[File:WxgladeWinExample.png|thumb|right|380px|alt=wxGlade running on Windows while designing a GUI for a wxPerl application|wxGlade supplies the visual portion of the shop. It is written using wxPython, but it can emit Perl source code directly.]]&lt;br /&gt;
&lt;br /&gt;
wxGlade is a separate application. It is written using Python and wxPython, even though the application being developed will use Perl and wxPerl.&lt;br /&gt;
&lt;br /&gt;
That is not a contradiction.&lt;br /&gt;
&lt;br /&gt;
A tool need not be written in the same language as the work it helps produce.&lt;br /&gt;
&lt;br /&gt;
The tested recipe currently documented at [[Developing and Distributing wxPerl Applications on Windows#wxGlade - a Perl Friendly Cross-Platform GUI Builder|Developing and Distributing wxPerl Applications on Windows]] uses:&lt;br /&gt;
&lt;br /&gt;
* Python 3.10.11;&lt;br /&gt;
* wxPython installed through &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and wxGlade 1.1.1.&lt;br /&gt;
&lt;br /&gt;
Later Python combinations may work, but the living page should be consulted before replacing a tested profile merely because a newer Python release exists.&lt;br /&gt;
&lt;br /&gt;
Install Python 3.10.11 using the link in the maintained instructions. Enable the option to add Python to the Windows &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open a normal Windows Command Prompt, not the Strawberry Perl terminal, and verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where python&lt;br /&gt;
python --version&lt;br /&gt;
python -m pip --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install wxPython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m pip install wxPython&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download and unpack wxGlade 1.1.1. A reasonable location is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Tools\wxGlade-1.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change to that directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\Tools\wxGlade-1.1.1&lt;br /&gt;
python wxglade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the distribution provides &amp;lt;code&amp;gt;wxglade.pyw&amp;lt;/code&amp;gt;, it can also be launched without retaining a console window.&lt;br /&gt;
&lt;br /&gt;
Create a small wrapper named:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Tools\wxGlade-1.1.1\start-wxglade.cmd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cd /d &amp;quot;C:\Tools\wxGlade-1.1.1&amp;quot;&lt;br /&gt;
start &amp;quot;&amp;quot; pythonw wxglade.pyw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adjust the path and filename to match the actual installation.&lt;br /&gt;
&lt;br /&gt;
A Windows shortcut may then point to &amp;lt;code&amp;gt;start-wxglade.cmd&amp;lt;/code&amp;gt;. The change of directory is useful because wxGlade may expect to find supporting files relative to its own directory.&lt;br /&gt;
&lt;br /&gt;
The desktop shortcut is not a mere convenience. A tool used frequently should be easy to start correctly. Requiring the programmer to remember a fragile launch ritual creates needless opportunities for error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MSYS2, vim, and Git ==&lt;br /&gt;
&lt;br /&gt;
MSYS2 provides a Unix-like terminal and package-management environment for Windows.&amp;lt;ref&amp;gt;[https://www.msys2.org/docs/what-is-msys2/ MSYS2, “What is MSYS2?”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install MSYS2 using its current official installer. Follow the official update procedure, which may require closing and reopening the terminal during a full system update.&lt;br /&gt;
&lt;br /&gt;
Then install vim and Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pacman -S vim git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vim --version&lt;br /&gt;
git --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Git will communicate with a remote repository over SSH, create or import the appropriate key and register the public key with the remote service.&lt;br /&gt;
&lt;br /&gt;
A useful optional &amp;lt;code&amp;gt;~/.vimrc&amp;lt;/code&amp;gt; for the author&#039;s preferred MSYS2 workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set mouse=&lt;br /&gt;
set noautoindent&lt;br /&gt;
set nosmartindent&lt;br /&gt;
set nocindent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are personal workflow choices rather than universal requirements. They make ordinary terminal copying easier and prevent automatic indentation from interfering with pasted or generated blocks.&lt;br /&gt;
&lt;br /&gt;
The critical check is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
which perl&lt;br /&gt;
perl -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside MSYS2, the reported Perl may be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not Strawberry Perl.&lt;br /&gt;
&lt;br /&gt;
That is acceptable because MSYS2 is being used for vim, Git, shell navigation, and source inspection.&lt;br /&gt;
&lt;br /&gt;
Do not use that Perl to run the generated wxPerl application.&lt;br /&gt;
&lt;br /&gt;
Use the Strawberry Perl command-line window for:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl your-application.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and later for:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm&lt;br /&gt;
wxpar&lt;br /&gt;
pp_autolink&lt;br /&gt;
gmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following table should remain mentally visible:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Two terminals, two responsibilities&lt;br /&gt;
! Environment&lt;br /&gt;
! Use it for&lt;br /&gt;
! Do not assume&lt;br /&gt;
|-&lt;br /&gt;
| MSYS2&lt;br /&gt;
| vim, Git, SSH, diffs, shell navigation&lt;br /&gt;
| That its &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt; is Strawberry Perl&lt;br /&gt;
|-&lt;br /&gt;
| Strawberry Perl command line&lt;br /&gt;
| Perl modules, wxPerl execution, application tests, packaging&lt;br /&gt;
| That Unix paths or MSYS2-specific shell behavior will apply&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A craftsman should know which shop he is standing in.&lt;br /&gt;
&lt;br /&gt;
== Create the first project directory ==&lt;br /&gt;
&lt;br /&gt;
Use a simple project for the first complete cycle.&lt;br /&gt;
&lt;br /&gt;
From the MSYS2 terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /c/work/hello-wxperl/screenshots&lt;br /&gt;
cd /c/work/hello-wxperl&lt;br /&gt;
git init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a short &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Hello wxPerl&lt;br /&gt;
&lt;br /&gt;
First wxGlade-generated wxPerl project created while raising the&lt;br /&gt;
Perl Lazarus development shop.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The directory will eventually contain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hello-wxperl/&lt;br /&gt;
├── hello-wxperl.wxg&lt;br /&gt;
├── hello-wxperl.pl&lt;br /&gt;
├── README.md&lt;br /&gt;
└── screenshots/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is intentionally smaller than the structure of a production application.&lt;br /&gt;
&lt;br /&gt;
The purpose is to prove the cycle before introducing application modules, tests, build directories, installer files, and documentation.&lt;br /&gt;
&lt;br /&gt;
== Design the first interface in wxGlade ==&lt;br /&gt;
&lt;br /&gt;
Open wxGlade.&lt;br /&gt;
&lt;br /&gt;
Create a new application containing:&lt;br /&gt;
&lt;br /&gt;
* one frame;&lt;br /&gt;
* one panel;&lt;br /&gt;
* one vertical box sizer;&lt;br /&gt;
* one static-text control;&lt;br /&gt;
* one button.&lt;br /&gt;
&lt;br /&gt;
Use names which communicate purpose:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Suggested name&lt;br /&gt;
! Label&lt;br /&gt;
|-&lt;br /&gt;
| Frame&lt;br /&gt;
| &amp;lt;code&amp;gt;MainFrame&amp;lt;/code&amp;gt;&lt;br /&gt;
| The Perl Lazarus Workshop&lt;br /&gt;
|-&lt;br /&gt;
| Static text&lt;br /&gt;
| &amp;lt;code&amp;gt;status_text&amp;lt;/code&amp;gt;&lt;br /&gt;
| The shop is ready.&lt;br /&gt;
|-&lt;br /&gt;
| Button&lt;br /&gt;
| &amp;lt;code&amp;gt;hello_button&amp;lt;/code&amp;gt;&lt;br /&gt;
| Test wxPerl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Select the root &#039;&#039;&#039;Application&#039;&#039;&#039; object in the wxGlade object tree.&lt;br /&gt;
&lt;br /&gt;
Set:&lt;br /&gt;
&lt;br /&gt;
* output language to &#039;&#039;&#039;Perl&#039;&#039;&#039;;&lt;br /&gt;
* wxWidgets compatibility to &#039;&#039;&#039;3.0&#039;&#039;&#039;;&lt;br /&gt;
* output path to the project Perl file;&lt;br /&gt;
* code generation to &#039;&#039;&#039;Single file&#039;&#039;&#039;;&lt;br /&gt;
* and &#039;&#039;&#039;Keep user code&#039;&#039;&#039; to enabled.&lt;br /&gt;
&lt;br /&gt;
[[File:Applicationsettings.png|thumb|left|330px|alt=wxGlade application output settings configured for Perl code generation and preservation of user code|The important initial wxGlade settings include Perl output and Keep user code. Without code preservation, a later generation may overwrite handwritten work.]]&lt;br /&gt;
&lt;br /&gt;
Save the wxGlade project as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\work\hello-wxperl\hello-wxperl.wxg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the Perl output file to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\work\hello-wxperl\hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Press:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ctrl-G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to generate the Perl source.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file is not the Perl program. It is the XML project describing the visual design.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file is the code emitted from that design.&lt;br /&gt;
&lt;br /&gt;
Both are valuable source artifacts and both should be kept in Git.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inspect what wxGlade emitted ==&lt;br /&gt;
&lt;br /&gt;
Return to the MSYS2 terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /c/work/hello-wxperl&lt;br /&gt;
ls -l&lt;br /&gt;
vim hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not immediately begin changing random portions of the generated code.&lt;br /&gt;
&lt;br /&gt;
First inspect:&lt;br /&gt;
&lt;br /&gt;
* the packages wxGlade created;&lt;br /&gt;
* the frame constructor;&lt;br /&gt;
* the controls;&lt;br /&gt;
* the sizers;&lt;br /&gt;
* the generated identifiers;&lt;br /&gt;
* the event-handler placeholders;&lt;br /&gt;
* the application class;&lt;br /&gt;
* and the final call to the event loop.&lt;br /&gt;
&lt;br /&gt;
Look for wxGlade&#039;s generated-code markers. Their exact form may change among releases, but they identify sections which wxGlade owns and may regenerate.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Keep user code&#039;&#039;&#039; option is intended to preserve code outside those protected generation blocks.&lt;br /&gt;
&lt;br /&gt;
It is not permission to ignore source control.&lt;br /&gt;
&lt;br /&gt;
Before adding handwritten behavior, commit the generated baseline:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git add hello-wxperl.wxg hello-wxperl.pl README.md&lt;br /&gt;
git commit -m &amp;quot;Generate initial wxGlade wxPerl application&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now there is a recoverable point before the first manual edit.&lt;br /&gt;
&lt;br /&gt;
== Run the generated Perl with Strawberry Perl ==&lt;br /&gt;
&lt;br /&gt;
Open the Strawberry Perl command-line window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\work\hello-wxperl&lt;br /&gt;
where perl&lt;br /&gt;
perl hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The frame should appear with the static text and button.&lt;br /&gt;
&lt;br /&gt;
The button may not yet perform useful work. That is expected.&lt;br /&gt;
&lt;br /&gt;
At this stage the entire visual generation path has been verified:&lt;br /&gt;
&lt;br /&gt;
```text&lt;br /&gt;
wxGlade .wxg project&lt;br /&gt;
        ↓&lt;br /&gt;
Perl source emission&lt;br /&gt;
        ↓&lt;br /&gt;
Strawberry Perl&lt;br /&gt;
        ↓&lt;br /&gt;
wxPerl / wxWidgets&lt;br /&gt;
        ↓&lt;br /&gt;
Windows frame&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=375</id>
		<title>The Perl Lazarus Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=375"/>
		<updated>2026-07-20T04:36:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Lazarus Workshop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the second essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. It follows [[The Perl Craftsman Returns to the Windows Desktop]] and explains the tools chosen for the Perl Lazarus Project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A craftsman does not require every tool in his workshop to have been forged by the same smith.&lt;br /&gt;
&lt;br /&gt;
He requires tools which are sound, tools whose purposes he understands, and tools which can be arranged into a dependable way of working.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer who wants to build a Windows desktop application already possesses the most important part of the workshop: Perl itself, together with the knowledge accumulated through years of writing scripts, maintaining systems, serving websites, transforming data, communicating with databases, and solving problems which did not arrive in a convenient form.&lt;br /&gt;
&lt;br /&gt;
What has often been missing is not ability. It is a clear path through the remaining tools.&lt;br /&gt;
&lt;br /&gt;
Perl has long had graphical toolkits, Windows modules, packaging systems, database drivers, networking libraries, and access to native code. Yet the programmer who asks a simple practical question—&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How do I begin with Perl code and end with a Windows application which another person can install?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
—may discover that the answer is distributed among old documentation, CPAN modules, build systems, archived projects, present-day tools, mailing-list discussions, source repositories, and hard-won experience.&lt;br /&gt;
&lt;br /&gt;
The [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project workflow]] does not attempt to hide these tools behind an enormous new integrated development environment. Its first objective is more modest and, for the present need, more useful: identify a modern combination which works, explain what each part contributes, and document a journey which another Perl programmer can repeat.&lt;br /&gt;
&lt;br /&gt;
The resulting workshop consists principally of:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* wxWidgets;&lt;br /&gt;
* &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;;&lt;br /&gt;
* wxPerl;&lt;br /&gt;
* wxGlade;&lt;br /&gt;
* MSYS2, vim, and Git;&lt;br /&gt;
* PAR-based packaging tools;&lt;br /&gt;
* DLL-discovery tools;&lt;br /&gt;
* Inno Setup;&lt;br /&gt;
* and a separate clean Windows environment in which the finished work can be tested.&lt;br /&gt;
&lt;br /&gt;
These tools do not all perform the same kind of work. They form layers.&lt;br /&gt;
&lt;br /&gt;
Understanding those layers is more valuable than memorizing a list of commands.&lt;br /&gt;
&lt;br /&gt;
== A workshop, not a monolith ==&lt;br /&gt;
&lt;br /&gt;
[[File:FreeAPIGUI.png|thumb|right|340px|alt=A wxPerl graphical application running as a Windows executable|The practical objective of the workshop is not merely a Perl script with a window, but a complete Windows application which users can run without installing the developer&#039;s toolchain.]]&lt;br /&gt;
&lt;br /&gt;
The Free Pascal Lazarus IDE provides part of the inspiration for the Perl Lazarus Project because it presents application development as a coherent activity.&lt;br /&gt;
&lt;br /&gt;
A Lazarus programmer can install an environment, create a project, place controls on a form, connect those controls to code, compile the application, and begin distributing the result. Around that process has grown a productive community of component authors, application developers, teachers, consultants, publishers, support providers, and specialist toolmakers.&lt;br /&gt;
&lt;br /&gt;
This is more significant than the presence of any one editor or form designer.&lt;br /&gt;
&lt;br /&gt;
The Lazarus and Free Pascal community demonstrates how a language community can support a practical micro-economy. The compiler may be freely available, but books still require authors. Components require maintainers. Applications require designers, testers, documenters, trainers, and support providers. Businesses and specialist communities still need programmers who understand their particular work.&lt;br /&gt;
&lt;br /&gt;
Shared tools do not abolish human labor. They make new forms of labor possible.&lt;br /&gt;
&lt;br /&gt;
Perl does not presently need to reproduce the entire Lazarus IDE in order to benefit from this example. The tools required for an effective Windows workshop already exist. The immediate need is to arrange them coherently.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Workshop is therefore deliberately plural. One program supplies the Perl environment. Another supplies the graphical library. Another generates the interface code. Another provides a familiar editing shell. Several tools cooperate to construct the executable. Another creates the installer.&lt;br /&gt;
&lt;br /&gt;
This arrangement may initially appear less elegant than a single commercial IDE. It also has advantages.&lt;br /&gt;
&lt;br /&gt;
Each tool can be understood independently. Each may be replaced when a better tool appears. The developer is not entirely dependent upon one vendor, one file format, or one abandoned product. The workflow can improve incrementally without requiring the whole workshop to be rebuilt at once.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strawberry Perl: the foundation of the Windows shop ==&lt;br /&gt;
&lt;br /&gt;
The first layer is [https://strawberryperl.com/ Strawberry Perl].&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl is not merely a Perl interpreter placed on Windows. It provides a native Perl distribution together with the compiler and build tools needed to install a broad range of CPAN modules, including modules containing XS or other native components.&amp;lt;ref&amp;gt;[https://strawberryperl.com/releases.html Strawberry Perl, “Releases”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That distinction matters for wxPerl.&lt;br /&gt;
&lt;br /&gt;
A graphical binding to a substantial C++ library cannot be treated exactly like a small pure-Perl module. Native libraries must be built or supplied in compatible forms. Architectures must match. Compilers, DLLs, headers, and Perl configuration all matter.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl gives us a practical foundation upon which that native work can occur.&lt;br /&gt;
&lt;br /&gt;
It also provides tools which many Perl programmers already know how to use:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;cpan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cpanm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;gmake&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and the normal Perl library structure.&lt;br /&gt;
&lt;br /&gt;
This is one reason the Perl Lazarus Project emphasizes Strawberry Perl rather than requiring the user to construct a custom Perl environment from unrelated pieces.&lt;br /&gt;
&lt;br /&gt;
The chosen environment should still be treated as a tested combination rather than an abstract promise that every release will work with every other release. The maintained installation page records current, previously tested, experimental, and archived combinations:&lt;br /&gt;
&lt;br /&gt;
* [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1|a previously tested Strawberry Perl 5.40 and Wx 3.008 path]];&lt;br /&gt;
* [[Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL|a newer PDL-oriented Strawberry Perl 5.42 and Wx 3.009 path]];&lt;br /&gt;
* and older combinations which remain useful when investigating regressions.&lt;br /&gt;
&lt;br /&gt;
This distinction between a &#039;&#039;known working profile&#039;&#039; and the &#039;&#039;newest possible profile&#039;&#039; is an exercise in practical wisdom.&lt;br /&gt;
&lt;br /&gt;
A craftsman may experiment with newer tools. He should not confuse experimentation with a promise to users.&lt;br /&gt;
&lt;br /&gt;
== wxWidgets: a mature graphical foundation ==&lt;br /&gt;
&lt;br /&gt;
The graphical foundation beneath wxPerl is [https://wxwidgets.org/ wxWidgets].&lt;br /&gt;
&lt;br /&gt;
wxWidgets began as an effort to create portable graphical applications for Unix and Windows and later expanded to support additional operating systems and graphical back ends.&amp;lt;ref&amp;gt;[https://wxwidgets.org/about/ wxWidgets, “Overview”]&amp;lt;/ref&amp;gt; It supplies windows, dialogs, menus, controls, event handling, drawing facilities, printing support, internationalization, networking helpers, and many other facilities required by desktop applications.&lt;br /&gt;
&lt;br /&gt;
Its architecture is important.&lt;br /&gt;
&lt;br /&gt;
wxWidgets does not generally seek to make every application display an entirely artificial set of controls which merely resemble the host operating system. It provides ports which use the facilities of the underlying environment. On Windows, the result can behave and appear like a Windows application rather than like a foreign interface transported unchanged from another platform.&lt;br /&gt;
&lt;br /&gt;
This supports two related goals.&lt;br /&gt;
&lt;br /&gt;
First, the application can be familiar to the Windows user.&lt;br /&gt;
&lt;br /&gt;
Second, the programmer is not necessarily imprisoned within Windows forever. wxWidgets has always been concerned with cross-platform application development, even though this series intentionally concentrates on producing and distributing the Windows version first.&lt;br /&gt;
&lt;br /&gt;
wxWidgets also has a long history of associated development tools. Its own historical record includes commercial dialog and RAD products such as wxDesigner, while its broader ecosystem has included interface builders, component libraries, language bindings, books, and commercial support.&amp;lt;ref&amp;gt;[https://wxwidgets.org/about/history/ wxWidgets, “History”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Readers interested in that longer story should consult [[Perl and wxWidgets RAD on Windows]], which records earlier Perl-capable GUI builders, discontinued packaging environments, and related attempts to provide an integrated Windows application workflow.&lt;br /&gt;
&lt;br /&gt;
The history matters because the Perl Lazarus Project did not arise in an empty field. It receives working pieces from earlier craftsmen, learns from abandoned paths, and attempts to preserve what can still be used.&lt;br /&gt;
&lt;br /&gt;
== Alien::wxWidgets: locating and describing the native library ==&lt;br /&gt;
&lt;br /&gt;
Between wxWidgets and the Perl binding sits &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The name “Alien” can sound more mysterious than the function it performs. In the Perl ecosystem, an Alien distribution generally helps locate, build, or describe a non-Perl library needed by Perl modules.&lt;br /&gt;
&lt;br /&gt;
In this workshop, &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; provides the bridge between the native wxWidgets installation and the build of wxPerl. It records the information needed to compile and link the Perl binding against a suitable wxWidgets library.&lt;br /&gt;
&lt;br /&gt;
This layer is one reason version combinations matter.&lt;br /&gt;
&lt;br /&gt;
The relevant versions of:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* its compiler and runtime;&lt;br /&gt;
* wxWidgets;&lt;br /&gt;
* &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
must agree sufficiently for the build to complete and the resulting programs to run.&lt;br /&gt;
&lt;br /&gt;
The installation script being developed for the Perl Lazarus Project exists to make this sequence repeatable. It does not abolish the need to understand the sequence.&lt;br /&gt;
&lt;br /&gt;
A good installation script should reveal:&lt;br /&gt;
&lt;br /&gt;
# which version is being installed;&lt;br /&gt;
# where it was obtained;&lt;br /&gt;
# which command is being run;&lt;br /&gt;
# where its output is logged;&lt;br /&gt;
# whether the stage succeeded;&lt;br /&gt;
# and how the result can be verified.&lt;br /&gt;
&lt;br /&gt;
Automation is valuable when it preserves successful labor and allows another person to reproduce it. It becomes dangerous when it conceals the state of the workshop from the craftsman who must later repair it.&lt;br /&gt;
&lt;br /&gt;
== wxPerl: placing wxWidgets in Perl hands ==&lt;br /&gt;
&lt;br /&gt;
The Perl binding itself is distributed as &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; and is commonly called wxPerl.&lt;br /&gt;
&lt;br /&gt;
wxPerl allows a Perl program to create and control wxWidgets objects: applications, frames, panels, dialogs, buttons, text controls, lists, grids, notebooks, menus, status bars, timers, drawing contexts, and the many other facilities supplied by wxWidgets.&lt;br /&gt;
&lt;br /&gt;
This means the Perl programmer can bring existing Perl abilities directly into an event-driven desktop application.&lt;br /&gt;
&lt;br /&gt;
The database layer may still use DBI.&lt;br /&gt;
&lt;br /&gt;
The web client may still use familiar HTTP and JSON modules.&lt;br /&gt;
&lt;br /&gt;
The parser may still be the parser already tested in a command-line program or server process.&lt;br /&gt;
&lt;br /&gt;
The validation rules may still live in ordinary Perl modules.&lt;br /&gt;
&lt;br /&gt;
wxPerl does not require the craftsman to abandon the language in which the underlying work is already expressed. It gives that work a graphical point of contact with the user.&lt;br /&gt;
&lt;br /&gt;
The renewed ability to install and build wxPerl on current Windows environments owes much to the wxPerl revival work led by Johan Vromans and assisted by others who tested, corrected, and documented the modern build path.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds on that labor. It is not a claim to have independently recreated wxPerl. It is an effort to carry the revived binding further into a repeatable development, packaging, and distribution practice.&lt;br /&gt;
&lt;br /&gt;
The first verification after installation should therefore be visible and concrete. &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; provides examples of many available controls and facilities, while a minimal application verifies that Perl can create a frame and enter the wxWidgets event loop.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will perform that verification in detail.&lt;br /&gt;
&lt;br /&gt;
== wxGlade: visual design which emits Perl ==&lt;br /&gt;
&lt;br /&gt;
[[File:WxgladeWinExample.png|thumb|left|380px|alt=wxGlade running on Windows while designing an interface for a wxPerl application|wxGlade is written using wxPython, but it can save the interface design as XML and emit Perl source code for a wxPerl application.]]&lt;br /&gt;
&lt;br /&gt;
wxPerl gives the programmer access to the graphical library, but constructing every interface entirely by hand can involve a large amount of mechanical work.&lt;br /&gt;
&lt;br /&gt;
Controls must be created, placed in sizers, connected to parent windows, assigned properties, and adjusted repeatedly as the layout develops.&lt;br /&gt;
&lt;br /&gt;
[https://wxglade.sourceforge.net/ wxGlade] provides a visual design environment for wxWidgets applications. It is written using wxPython, but this does not limit it to Python output. It can generate Python, C++, Perl, Lisp, and XRC.&amp;lt;ref&amp;gt;[https://wxglade.sourceforge.net/ wxGlade, project overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Perl Lazarus Workshop, the critical fact is simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
wxGlade emits Perl.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The craftsman can arrange a window visually, save the wxGlade project as a &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; XML file, and generate a Perl source file containing the corresponding wxPerl classes.&lt;br /&gt;
&lt;br /&gt;
This makes possible a RAD-like cycle:&lt;br /&gt;
&lt;br /&gt;
# Design or revise the interface in wxGlade.&lt;br /&gt;
# Save the &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project.&lt;br /&gt;
# Generate Perl.&lt;br /&gt;
# Inspect the emitted changes.&lt;br /&gt;
# Add or revise application behavior.&lt;br /&gt;
# Run the program with Strawberry Perl.&lt;br /&gt;
# Return to wxGlade when the visual design changes.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl and wxGlade template repository] contains example interfaces intended as starting points for this process. The templates include familiar window patterns and historical interface recreations which can be opened in wxGlade, examined, changed, and emitted as Perl.&lt;br /&gt;
&lt;br /&gt;
AI tools have also been effective in producing first-draft wxGlade XML files from natural-language descriptions. Those drafts are not final designs. They are materials brought into the workshop.&lt;br /&gt;
&lt;br /&gt;
The proper process remains human:&lt;br /&gt;
&lt;br /&gt;
# describe the intended interface;&lt;br /&gt;
# generate or obtain a first-draft &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file;&lt;br /&gt;
# open it in wxGlade;&lt;br /&gt;
# inspect the hierarchy and properties;&lt;br /&gt;
# correct the layout;&lt;br /&gt;
# emit Perl;&lt;br /&gt;
# wire the application behavior;&lt;br /&gt;
# review the code;&lt;br /&gt;
# and test the result.&lt;br /&gt;
&lt;br /&gt;
AI may accelerate the preparation of material. It does not determine whether the interface serves the user, whether generated code is safe, or whether the application fulfills its promises.&lt;br /&gt;
&lt;br /&gt;
The craftsman remains responsible.&lt;br /&gt;
&lt;br /&gt;
Readers who need ideas for first projects may consult [[GUI ideas for use with wxGlade]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MSYS2, vim, and Git: recovering a familiar working rhythm ==&lt;br /&gt;
&lt;br /&gt;
A Windows application should be built and tested against Strawberry Perl, but the craftsman does not need to abandon a familiar Unix-like editing workflow.&lt;br /&gt;
&lt;br /&gt;
[https://www.msys2.org/ MSYS2] supplies a Unix-like command-line environment and a package manager for Windows.&amp;lt;ref&amp;gt;[https://www.msys2.org/docs/what-is-msys2/ MSYS2, “What is MSYS2?”]&amp;lt;/ref&amp;gt; Within its terminal, the programmer can install vim and Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pacman -S vim git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates a productive division of labor.&lt;br /&gt;
&lt;br /&gt;
The MSYS2 terminal can be used for:&lt;br /&gt;
&lt;br /&gt;
* editing with vim;&lt;br /&gt;
* reviewing diffs;&lt;br /&gt;
* committing changes;&lt;br /&gt;
* managing branches;&lt;br /&gt;
* using SSH keys;&lt;br /&gt;
* navigating the project with familiar shell tools;&lt;br /&gt;
* and performing the normal source-control work of a Unix-oriented Perl programmer.&lt;br /&gt;
&lt;br /&gt;
The Strawberry Perl terminal should be used for:&lt;br /&gt;
&lt;br /&gt;
* installing Perl modules;&lt;br /&gt;
* running the wxPerl application;&lt;br /&gt;
* executing Perl-oriented build commands;&lt;br /&gt;
* creating the executable;&lt;br /&gt;
* and verifying behavior against the actual Perl environment intended by the project.&lt;br /&gt;
&lt;br /&gt;
This separation is not merely a personal preference. Installing Git and related packages in MSYS2 may also install an MSYS2 Perl. Running the application from that shell without checking the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; can therefore invoke a different Perl than the Strawberry Perl for which wxPerl was built.&lt;br /&gt;
&lt;br /&gt;
The programmer should know which Perl is active.&lt;br /&gt;
&lt;br /&gt;
A workshop may contain two hammers. The craftsman must still know which one he has picked up.&lt;br /&gt;
&lt;br /&gt;
Git is particularly important when generated code is involved. wxGlade can preserve user code when configured properly, but configuration mistakes and generation changes can still damage handwritten work. A clean commit before generation gives the programmer a truthful record of what changed and a practical way to recover.&lt;br /&gt;
&lt;br /&gt;
The detailed edit–emit–wire–run workflow belongs to the next essay. Here it is enough to recognize that MSYS2 is not replacing Strawberry Perl. It restores a familiar editing and revision rhythm around it.&lt;br /&gt;
&lt;br /&gt;
== PAR, wxpar, and the hidden contents of an executable ==&lt;br /&gt;
&lt;br /&gt;
A working wxPerl script is not yet a distributable Windows product.&lt;br /&gt;
&lt;br /&gt;
The user should not be required to install Strawberry Perl, compile wxWidgets, install CPAN modules, configure environment variables, or reproduce the developer&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
PAR-based tools help collect the Perl interpreter, modules, and supporting material into a Windows executable.&lt;br /&gt;
&lt;br /&gt;
The current workshop uses:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PAR::Packer&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;Wx::Perl::Packager&amp;lt;/code&amp;gt;, which provides &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt;, which provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A minimal wxPerl packing command may look simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxpar my-application.pl -o my-application.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real difficulty is often not the command. It is discovering everything the application needs.&lt;br /&gt;
&lt;br /&gt;
A script which makes HTTPS requests may depend upon OpenSSL and compression DLLs which were present in Strawberry Perl&#039;s directories during development but are not automatically obvious to the packager. The program may work perfectly on the craftsman&#039;s computer and fail immediately on the customer&#039;s.&lt;br /&gt;
&lt;br /&gt;
This is why &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt; has proven especially valuable in the documented workflow. It helps discover native DLLs which must be linked explicitly into the packed application.&lt;br /&gt;
&lt;br /&gt;
The packaging layer therefore teaches an important lesson:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
A dependency which is invisible to the developer is not invisible to the user&#039;s computer.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A professional result requires dependency discovery, a repeatable build command, and testing away from the development installation.&lt;br /&gt;
&lt;br /&gt;
The current [[Developing and Distributing wxPerl Applications on Windows#Creating Windows EXEs|executable-building notes]] preserve this still-developing body of experience, including special cases involving HTTPS and &amp;lt;code&amp;gt;Net::SSLeay&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Martha: assistance at the difficult boundary ==&lt;br /&gt;
&lt;br /&gt;
The tool named Martha belongs near the far end of the workshop, not at its foundation.&lt;br /&gt;
&lt;br /&gt;
Martha does not replace Strawberry Perl, wxPerl, wxGlade, PAR, or Inno Setup. It is a wxPerl application created to assist with the difficult transition from a working Perl program to a package which can be installed and tested.&lt;br /&gt;
&lt;br /&gt;
Its present work includes assistance with:&lt;br /&gt;
&lt;br /&gt;
* discovering required DLLs;&lt;br /&gt;
* generating a Makefile based on &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;;&lt;br /&gt;
* allowing that Makefile to be reviewed and adjusted;&lt;br /&gt;
* running the executable build;&lt;br /&gt;
* generating an Inno Setup configuration;&lt;br /&gt;
* building the installer;&lt;br /&gt;
* and testing the resulting stages.&lt;br /&gt;
&lt;br /&gt;
The name is related to Lazarus, but Martha&#039;s role is deliberately practical. The Perl Lazarus Project describes the larger revival and workflow. Martha helps with some of the work which is repetitive, error-prone, and easy to perform inconsistently.&lt;br /&gt;
&lt;br /&gt;
The important principle is that the helper should expose the process rather than make it unknowable. The programmer should be able to inspect the generated Makefile, see the DLL paths, read the Inno Setup script, and reproduce the command outside the GUI.&lt;br /&gt;
&lt;br /&gt;
A good tool assists judgment. It does not demand the surrender of judgment.&lt;br /&gt;
&lt;br /&gt;
For current details, see [[Developing and Distributing wxPerl Applications on Windows#Martha - A lightweight wxPerl helper for packaging Perl applications on Windows|Martha&#039;s role in the documented workflow]].&lt;br /&gt;
&lt;br /&gt;
== Inno Setup: placing the work into the user&#039;s hands ==&lt;br /&gt;
&lt;br /&gt;
The final major tool in the workshop is [https://jrsoftware.org/isinfo.php Inno Setup].&lt;br /&gt;
&lt;br /&gt;
A Windows executable can sometimes be distributed as a portable file, but ordinary Windows users commonly expect an installer. The installer can:&lt;br /&gt;
&lt;br /&gt;
* place program files in an appropriate directory;&lt;br /&gt;
* create a Start menu entry;&lt;br /&gt;
* create an optional desktop shortcut;&lt;br /&gt;
* register an uninstaller;&lt;br /&gt;
* preserve or update configuration;&lt;br /&gt;
* install additional resources;&lt;br /&gt;
* record version information;&lt;br /&gt;
* and provide a familiar route for upgrades and removal.&lt;br /&gt;
&lt;br /&gt;
Inno Setup has existed since 1997 and provides a mature scriptable installer system for Windows.&amp;lt;ref&amp;gt;[https://jrsoftware.org/isinfo.php JRSoftware, “What is Inno Setup?”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also offers a good example of a tool which empowers apprentices, hobbyists, nonprofits, and small developers while reasonably asking commercial users to support the human labor behind it.&lt;br /&gt;
&lt;br /&gt;
The Inno Setup authors request that commercial users purchase a commercial license.&amp;lt;ref&amp;gt;[https://jrsoftware.org/isorder.php JRSoftware, “Inno Setup Commercial Licenses”]&amp;lt;/ref&amp;gt; The request should be respected.&lt;br /&gt;
&lt;br /&gt;
A Perl craftsman who expects users to compensate his own labor should not treat the labor of toolmakers as though it appeared without cost or obligation.&lt;br /&gt;
&lt;br /&gt;
The license is not merely an administrative detail. It is part of a just relationship among craftsmen.&lt;br /&gt;
&lt;br /&gt;
Inno Setup lowers the barrier to professional Windows distribution. It allows a small developer to offer an installation experience which might otherwise require a substantial commercial packaging product or a large amount of custom engineering. When that tool contributes to commercial income, purchasing the requested license is an orderly acknowledgment of the value received.&lt;br /&gt;
&lt;br /&gt;
The installer itself must also respect the user.&lt;br /&gt;
&lt;br /&gt;
It should not request administrative privileges without need. It should not overwrite user-created data carelessly. It should not make removal intentionally difficult. It should not hide unrelated software in the package. It should explain what it is installing and preserve what the user has created.&lt;br /&gt;
&lt;br /&gt;
The installer is not wrapping placed around the “real application.”&lt;br /&gt;
&lt;br /&gt;
For the user, installation is the beginning of the application.&lt;br /&gt;
&lt;br /&gt;
== The living workshop and the written recipe ==&lt;br /&gt;
&lt;br /&gt;
The exact working version combination will change.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl will release new builds. wxWidgets will advance. &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; will be updated. wxGlade will correct problems and add features. Packaging tools will discover new edge cases. Windows will alter security behavior.&lt;br /&gt;
&lt;br /&gt;
A book or essay cannot freeze the workshop forever.&lt;br /&gt;
&lt;br /&gt;
This is why the series and the technical wiki serve different but complementary purposes.&lt;br /&gt;
&lt;br /&gt;
The essays explain:&lt;br /&gt;
&lt;br /&gt;
* why the tools were selected;&lt;br /&gt;
* how the layers relate;&lt;br /&gt;
* what kind of work each tool performs;&lt;br /&gt;
* and what virtues should govern their use.&lt;br /&gt;
&lt;br /&gt;
The living installation page records:&lt;br /&gt;
&lt;br /&gt;
* current download links;&lt;br /&gt;
* tested version combinations;&lt;br /&gt;
* experimental combinations;&lt;br /&gt;
* archived combinations;&lt;br /&gt;
* command lines;&lt;br /&gt;
* known failures;&lt;br /&gt;
* and corrections discovered through practice.&lt;br /&gt;
&lt;br /&gt;
The craftsman should consult both.&lt;br /&gt;
&lt;br /&gt;
A static essay without maintained instructions may become historically interesting but practically useless.&lt;br /&gt;
&lt;br /&gt;
A list of commands without an explanation of the workshop may work once while leaving the programmer unable to understand or repair it.&lt;br /&gt;
&lt;br /&gt;
Tradition requires both inherited wisdom and living application.&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
This stage of the journey is governed especially by practical wisdom, gratitude, justice, and humility.&lt;br /&gt;
&lt;br /&gt;
Practical wisdom asks what each tool is for.&lt;br /&gt;
&lt;br /&gt;
It prevents the programmer from selecting software merely because it is fashionable, entirely written in a preferred language, or advertised as capable of doing everything.&lt;br /&gt;
&lt;br /&gt;
Gratitude recognizes that the workshop is inherited.&lt;br /&gt;
&lt;br /&gt;
God is the source of creation, intelligence, talent, and opportunity. The programmer receives not only his own abilities, but also a world of prior human labor: operating systems, compilers, libraries, modules, editors, books, standards, and examples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“For wisdom is better than all the most precious things: and whatsoever may be desired cannot be compared to it.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Proverbs 8:11, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Justice gives the human makers of those tools what is due to them.&lt;br /&gt;
&lt;br /&gt;
That may include:&lt;br /&gt;
&lt;br /&gt;
* obeying licenses;&lt;br /&gt;
* preserving notices;&lt;br /&gt;
* paying a reasonable commercial fee;&lt;br /&gt;
* reporting defects honestly;&lt;br /&gt;
* acknowledging authors;&lt;br /&gt;
* contributing corrections;&lt;br /&gt;
* supporting maintainers;&lt;br /&gt;
* or teaching another person what one has learned.&lt;br /&gt;
&lt;br /&gt;
Humility acknowledges that no one programmer created the entire workshop.&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer may know far more about databases or server operations than the author of a GUI builder. The GUI-tool author may know far more about layout engines and code generation. The installer author may understand Windows installation behavior which the application programmer has never had to consider.&lt;br /&gt;
&lt;br /&gt;
The guild-minded craftsman does not resent this dependence. Human beings are made to receive from and contribute to one another.&lt;br /&gt;
&lt;br /&gt;
The tools themselves must remain properly ordered.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl serves the Perl programmer.&lt;br /&gt;
&lt;br /&gt;
wxWidgets serves the graphical application.&lt;br /&gt;
&lt;br /&gt;
wxGlade serves the designer.&lt;br /&gt;
&lt;br /&gt;
MSYS2 and vim serve the editing process.&lt;br /&gt;
&lt;br /&gt;
Git serves truthful revision and recovery.&lt;br /&gt;
&lt;br /&gt;
PAR serves distribution.&lt;br /&gt;
&lt;br /&gt;
Inno Setup serves installation.&lt;br /&gt;
&lt;br /&gt;
AI may assist preparation, explanation, and first drafts.&lt;br /&gt;
&lt;br /&gt;
None of them is the master.&lt;br /&gt;
&lt;br /&gt;
The human craftsman remains responsible for choosing the purpose, judging the result, keeping promises, protecting the user, and directing the work toward the good.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: draw your workshop map ==&lt;br /&gt;
&lt;br /&gt;
Before installing the full stack, prepare a workshop inventory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ The Perl Lazarus Workshop&lt;br /&gt;
! Layer&lt;br /&gt;
! Selected tool&lt;br /&gt;
! Work performed&lt;br /&gt;
! Verification&lt;br /&gt;
|-&lt;br /&gt;
| Perl environment&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| Runs Perl and supplies native build tools&lt;br /&gt;
| Confirm the intended &amp;lt;code&amp;gt;perl.exe&amp;lt;/code&amp;gt;, architecture, and compiler&lt;br /&gt;
|-&lt;br /&gt;
| Native GUI library&lt;br /&gt;
| wxWidgets&lt;br /&gt;
| Supplies windows, controls, events, and platform integration&lt;br /&gt;
| Confirm the wxWidgets version used by wxPerl&lt;br /&gt;
|-&lt;br /&gt;
| Native-library bridge&lt;br /&gt;
| &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;&lt;br /&gt;
| Describes or supplies the wxWidgets build used by Perl&lt;br /&gt;
| Query the installed module version and build configuration&lt;br /&gt;
|-&lt;br /&gt;
| Perl GUI binding&lt;br /&gt;
| &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; / wxPerl&lt;br /&gt;
| Makes wxWidgets available to Perl&lt;br /&gt;
| Run a minimal frame and &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Visual designer&lt;br /&gt;
| wxGlade&lt;br /&gt;
| Saves the visual design and emits Perl or XRC&lt;br /&gt;
| Generate and run a small Perl interface&lt;br /&gt;
|-&lt;br /&gt;
| Editing environment&lt;br /&gt;
| MSYS2 and vim&lt;br /&gt;
| Supplies a familiar Unix-like editing shell&lt;br /&gt;
| Confirm vim and the project paths&lt;br /&gt;
|-&lt;br /&gt;
| Revision control&lt;br /&gt;
| Git&lt;br /&gt;
| Preserves history, diffs, and recoverable checkpoints&lt;br /&gt;
| Create a repository and commit the generated project&lt;br /&gt;
|-&lt;br /&gt;
| Executable packaging&lt;br /&gt;
| PAR, &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;&lt;br /&gt;
| Packages Perl and discovers native dependencies&lt;br /&gt;
| Run the EXE outside the Strawberry Perl terminal&lt;br /&gt;
|-&lt;br /&gt;
| Installer&lt;br /&gt;
| Inno Setup&lt;br /&gt;
| Produces the Windows installation experience&lt;br /&gt;
| Install, launch, upgrade, and uninstall on a clean machine&lt;br /&gt;
|-&lt;br /&gt;
| Independent test bench&lt;br /&gt;
| Clean Windows virtual machine or physical system&lt;br /&gt;
| Reveals dependencies accidentally supplied by the workshop&lt;br /&gt;
| Test without Strawberry Perl or the development tools installed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For each tool, answer:&lt;br /&gt;
&lt;br /&gt;
# What exact task does it perform?&lt;br /&gt;
# Which other layer does it depend upon?&lt;br /&gt;
# Which version has actually been tested?&lt;br /&gt;
# How will success be verified?&lt;br /&gt;
# Where will installation and build logs be kept?&lt;br /&gt;
# What license governs its use?&lt;br /&gt;
# What labor and knowledge did its authors contribute?&lt;br /&gt;
# What would happen to the workflow if the tool disappeared?&lt;br /&gt;
# Is the project data stored in an open or inspectable format?&lt;br /&gt;
# Can the important build steps be reproduced without a graphical helper?&lt;br /&gt;
&lt;br /&gt;
The purpose is not to produce paperwork for its own sake.&lt;br /&gt;
&lt;br /&gt;
The map helps the craftsman understand his shop before something breaks.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[Raising a Working wxPerl Shop on Windows]], will assemble this workshop in practice.&lt;br /&gt;
&lt;br /&gt;
It will cover:&lt;br /&gt;
&lt;br /&gt;
* selecting a tested Strawberry Perl profile;&lt;br /&gt;
* using the Perl Lazarus installation BAT file;&lt;br /&gt;
* preserving installation logs;&lt;br /&gt;
* verifying &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;;&lt;br /&gt;
* running &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt;;&lt;br /&gt;
* installing and launching wxGlade;&lt;br /&gt;
* configuring MSYS2, vim, and Git;&lt;br /&gt;
* generating the first Perl GUI;&lt;br /&gt;
* wiring an event;&lt;br /&gt;
* running it under Strawberry Perl;&lt;br /&gt;
* and committing the result.&lt;br /&gt;
&lt;br /&gt;
At the end of that essay, the reader should possess more than a collection of installed programs.&lt;br /&gt;
&lt;br /&gt;
He should possess a working shop, a generated wxPerl application, a known active Perl environment, and the beginning of a repeatable craft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Lazarus Workshop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;br /&gt;
[[Category:Strawberry Perl]]&lt;br /&gt;
[[Category:wxWidgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=374</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=374"/>
		<updated>2026-07-19T21:26:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
Playing a game is not a lesser or shameful use of a computer. Recreation has its proper place. Yet games often place young people near modding, scripting, servers, digital art, online communities, hardware, configuration files, and technical curiosity. These can become entrances into a genuine craft.&lt;br /&gt;
&lt;br /&gt;
Some future Perl programmer is probably using a Windows computer right now without knowing that Perl exists.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
God is the Creator of the world, of the human person, and of every good thing upon which human work depends. The materials of the earth, the order discoverable within creation, the human capacity to reason, and the time and opportunity in which we work are not self-created possessions. They are gifts entrusted to us.&lt;br /&gt;
&lt;br /&gt;
Our talents also come from God. Intelligence, imagination, memory, patience, physical ability, experience, and the capacity to learn may be cultivated through discipline, but we did not first give these powers to ourselves.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“What hast thou that thou hast not received?”&lt;br /&gt;
&amp;lt;br /&amp;gt;— 1 Corinthians 4:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The programmer therefore creates only in a secondary and dependent sense. He does not create from nothing. He receives a world already made, abilities already given, knowledge preserved through the labor of others, and tools built by other craftsmen. Through his own labor he may then cultivate, combine, order, transform, and apply these gifts in ways which serve other persons.&lt;br /&gt;
&lt;br /&gt;
This dependence does not make human work insignificant. It gives work its proper dignity and purpose. Human labor is one of the means by which men and women develop the gifts of creation, provide for their families, serve their neighbors, form communities, and contribute to the common good.&lt;br /&gt;
&lt;br /&gt;
Work is ordered toward the good of persons because the human person is created by God and possesses a dignity which no employer, market, government, machine, or measure of productivity can bestow or remove. The programmer does not exist for the software, the company, or the market. Software, companies, and markets exist to serve human life and human communities.&lt;br /&gt;
&lt;br /&gt;
A technically impressive application which deceives its customers, degrades its workers, burdens its users, corrupts their work, or treats persons merely as sources of data and revenue cannot be considered excellent craftsmanship.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
These names describe differences in skill, experience, and responsibility. They do not describe differences in human worth. The apprentice, journeyman, master, customer, and user possess the same God-given dignity.&lt;br /&gt;
&lt;br /&gt;
Mastery is achieved through the development of received talents, disciplined labor, experience, instruction, and grace. It gives the master greater responsibility, but it does not make him a higher kind of human being. Greater mastery creates greater obligations of honesty, patience, justice, humility, service, and care.&lt;br /&gt;
&lt;br /&gt;
The master should therefore receive the apprentice not merely as inexpensive labor, but as a person whose gifts should be discovered, cultivated, corrected, and encouraged.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A master should also understand that knowledge is not diminished when it is handed on. The formation of an apprentice does not create a competitor who has stolen part of the master&#039;s trade. It strengthens the craft, preserves accumulated experience, and prepares another person to perform useful work.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application which no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
He already understands that a network can fail, that data must be validated, that an upgrade can damage a working system, and that a user who reports a problem is not necessarily mistaken. These lessons are harder to acquire than the syntax for creating a button.&lt;br /&gt;
&lt;br /&gt;
Learning wxPerl does not erase the journeyman&#039;s experience. It gives that experience another visible form.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It is impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the dominant desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/worldwide StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It is also overwhelmingly prevalent among the participants in Valve&#039;s Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing configuration files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, backups, updates, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who installs a modification has begun to discover dependencies, version compatibility, file layouts, and the difference between a working installation and a broken one.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, graphics, automation, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
A healthy guild does not merely preserve the techniques of its existing members. It invites new apprentices, gives them real work appropriate to their abilities, and allows them to grow into responsibility.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or other applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
The desktop application and web application need not compete. Each can perform the work suited to it.&lt;br /&gt;
&lt;br /&gt;
The server may maintain shared data, perform expensive searches, coordinate users, apply centralized business rules, or execute processing which requires resources not available on the user&#039;s machine.&lt;br /&gt;
&lt;br /&gt;
The desktop application may manage local files, provide richer interaction, preserve partially completed work, integrate with the user&#039;s operating system, and continue performing some tasks when the network is unavailable.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands. Larger systems should support the user, the independent programmer, and the local organization where their resources are genuinely needed, without unnecessarily taking away work and responsibility which can be competently exercised at the more immediate level.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not require isolation. It must be joined to solidarity. The individual programmer, the guild, the toolmaker, the server operator, and the user may depend upon one another. The objective is not to abandon the smaller participant, but to strengthen him without absorbing every responsibility into a distant centralized system.&lt;br /&gt;
&lt;br /&gt;
The goal is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows has an unusually strong culture of backward application compatibility. Microsoft describes application compatibility as an intentional design concern and recognizes that developers and customers expect applications in which they have invested to continue working.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/key-changes-since-windows-7-to-ensure-compatibility Microsoft Learn, “Key changes since Windows 7 to ensure compatibility”]&amp;lt;/ref&amp;gt; Microsoft has also stated that it goes to great lengths to preserve application and device compatibility when operating-system versions change.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows application manifests can even allow newer versions of the operating system to provide behaviors expected by software targeting earlier releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, unavailable libraries, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
At times, Windows&#039; compatibility expectations appear even more extreme than Perl&#039;s own.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
The author&#039;s own experiments with ActivePerl 5.8.8 on Windows 98 illustrate the remarkable historical reach of both ecosystems. This does not mean that new commercial software should target Windows 98. It means that the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, forced upgrades, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction or a remote service has been discontinued.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention, collect data, or make cancellation difficult. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
The user&#039;s investment matters. The user may have spent hours learning the software, entering data, developing procedures, training employees, or creating records which must be preserved. Backward compatibility is therefore not merely a technical convenience. It is a way of respecting labor already performed.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application which starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths which work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program which works in the workshop&lt;br /&gt;
| A program which works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|-&lt;br /&gt;
| Personal knowledge of hidden dependencies&lt;br /&gt;
| A package containing everything the application needs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It comes out of the larger work of Perl Guilds: supporting independent Perl programmers who seek to make a living through their trade, preserve practical knowledge, and place powerful tools into the hands of individual craftsmen and smaller communities.&amp;lt;ref&amp;gt;Brett Estrade, “Perl Lazarus Project,” presentation for the Summer 2026 Perl Community Conference, Austin, Texas.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name points first to Lazarus of the Bible, raised from the dead after four days. It is a fitting image for bringing renewed life to practical GUI development in Perl. The necessary modules and tools were not entirely gone, but the path among them had become difficult to see and difficult to follow.&lt;br /&gt;
&lt;br /&gt;
The name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, component libraries, documentation, packaging practices, examples, books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
The deeper inspiration is not merely the interface of an integrated development environment. It is the presence of a complete culture of application production.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, support, and the possibility of earning a livable wage through useful applications.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application&#039;s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
The language remains the craftsman&#039;s advantage. It does not need to become the customer&#039;s burden.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere in the [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]] material. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Wherefore I wished, and understanding was given me: and I called upon God, and the spirit of wisdom came upon me.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Wisdom 7:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor, but neither is human labor the first cause of creation or goodness.&lt;br /&gt;
&lt;br /&gt;
God alone is Creator in the proper sense. The earth and its materials, the natural order, the human person, reason, imagination, skill, time, opportunity, and the capacity to work are gifts from Him. Human beings create none of these things from nothing.&lt;br /&gt;
&lt;br /&gt;
Within that created order, however, the earthly goods which human society cultivates, fashions, organizes, preserves, repairs, and exchanges depend upon human labor acting upon gifts received from God. Labor adds form, usefulness, knowledge, order, accessibility, and service to what has been given.&lt;br /&gt;
&lt;br /&gt;
The programmer&#039;s abilities are therefore neither meaningless accidents nor entirely self-made possessions. They are talents entrusted to him. He has a duty to develop them, use them honestly, and direct them toward good purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Every best gift, and every perfect gift, is from above, coming down from the Father of lights.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— James 1:17, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not give itself a worthy purpose. It does not recognize the user&#039;s dignity, determine what justice requires, accept responsibility for an error, repent of deception, or choose to serve the common good.&lt;br /&gt;
&lt;br /&gt;
A compiler contains the accumulated labor of its authors and maintainers.&lt;br /&gt;
&lt;br /&gt;
A GUI designer preserves knowledge about widgets, layouts, serialization, and code generation.&lt;br /&gt;
&lt;br /&gt;
A Perl module contains work which another programmer has made reusable.&lt;br /&gt;
&lt;br /&gt;
An installer builder embodies years of experience with Windows installation, upgrades, shortcuts, permissions, and uninstallation.&lt;br /&gt;
&lt;br /&gt;
A body of documentation preserves the labor of those who discovered, tested, explained, and corrected the workflow before us.&lt;br /&gt;
&lt;br /&gt;
The virtuous programmer receives all of this with gratitude. He gives thanks first to God, from whom every talent and every good ultimately comes. He also gives human creators what is due to them: attribution, obedience to licenses, payment when reasonably requested, helpful correction, support, and respect for their work.&lt;br /&gt;
&lt;br /&gt;
The programmer who hopes to receive just compensation for his own labor should respect the labor which makes his work possible.&lt;br /&gt;
&lt;br /&gt;
The same order applies to artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
An AI system is a tool produced through human labor and trained through the use of humanly created materials, technical infrastructure, and natural resources. It is not a person, a craftsman, a moral agent, or the source of wisdom. It does not possess the dignity of the apprentice whose work it may assist, nor does it assume the responsibility of the master who chooses to employ it.&lt;br /&gt;
&lt;br /&gt;
AI may help the programmer produce a first draft of a wxGlade XML file, suggest Perl code, identify an error, or explain an unfamiliar API. The human programmer must still judge the purpose, verify the output, respect the rights and labor of others, protect the user, and accept responsibility for the finished application.&lt;br /&gt;
&lt;br /&gt;
The tool may assist the craftsman. It cannot replace the craftsman&#039;s moral agency.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good.&lt;br /&gt;
&lt;br /&gt;
Profit can be good when it sustains useful work, supports a family, allows continued maintenance, and makes service possible. It becomes disordered when users, workers, customers, or communities are treated merely as instruments for obtaining it.&lt;br /&gt;
&lt;br /&gt;
Likewise, open-source and freely available tools are good, but their availability does not mean that no human labor stands behind them. A sustainable guild economy depends upon mutual recognition: craftsmen receive tools, instruction, examples, testing, and support from others, and they contribute labor, knowledge, payment, encouragement, or maintenance in return.&lt;br /&gt;
&lt;br /&gt;
Good craftsmanship joins competence with justice.&lt;br /&gt;
&lt;br /&gt;
The craft reaches its proper earthly end when knowledge, tools, talents, and labor are received with gratitude and ordered toward truthful service of persons, families, and communities.&lt;br /&gt;
&lt;br /&gt;
Its final measure is not technical mastery, money, reputation, or even the survival of a particular programming language. The craftsman must ask whether he has used the gifts entrusted to him faithfully, treated others justly, served genuine human needs, and returned good fruit from the talents he received.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What burden, error, or unmet need does the application address?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version which would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What continuing responsibility will you accept after delivering it?&lt;br /&gt;
# How will the application respect the user&#039;s data and previous labor?&lt;br /&gt;
# Could an apprentice learn something useful by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
# Would the price, support arrangement, or business model allow the programmer to continue serving its users without harming his family or neglecting other obligations?&lt;br /&gt;
# What talents, opportunities, inherited knowledge, and tools has God entrusted to you for this work, and how will you use them faithfully?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product.&lt;br /&gt;
&lt;br /&gt;
A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
The first project might be:&lt;br /&gt;
&lt;br /&gt;
* a specialized file converter;&lt;br /&gt;
* a research tool;&lt;br /&gt;
* a desktop client for an existing Perl web application;&lt;br /&gt;
* a database front end;&lt;br /&gt;
* an image-processing utility;&lt;br /&gt;
* a scientific data viewer;&lt;br /&gt;
* an administrative console;&lt;br /&gt;
* a report generator;&lt;br /&gt;
* a collecting application;&lt;br /&gt;
* or a tool created for one profession, organization, or community.&lt;br /&gt;
&lt;br /&gt;
The value of a project does not depend upon millions of users. A tool may create substantial value by serving a small number of people whose work is important and whose needs are poorly understood by larger software vendors.&lt;br /&gt;
&lt;br /&gt;
The craftsman should begin close to the problem.&lt;br /&gt;
&lt;br /&gt;
Talk to the prospective user. Observe the existing work. Learn the vocabulary. Ask where mistakes occur, what consumes time, what information must be preserved, and what happens when the current process fails.&lt;br /&gt;
&lt;br /&gt;
The application should emerge from service to a real need, not from the desire to display technical cleverness.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, how the labor embodied in those tools makes new work possible, and why the chosen stack provides a practical route from Perl knowledge to a complete Windows application.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will then move from explanation to practice: installing the development environment, verifying wxPerl, adding wxGlade, establishing an efficient MSYS2 and vim workflow, generating Perl code, wiring an event, running the program under Strawberry Perl, and preserving the result in Git.&lt;br /&gt;
&lt;br /&gt;
The journey begins with an existing trade, a real human need, gifts received from God, and the decision to bring useful work to completion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=373</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=373"/>
		<updated>2026-07-19T21:19:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
Playing a game is not a lesser or shameful use of a computer. Recreation has its proper place. Yet games often place young people near modding, scripting, servers, digital art, online communities, hardware, configuration files, and technical curiosity. These can become entrances into a genuine craft.&lt;br /&gt;
&lt;br /&gt;
Some future Perl programmer is probably using a Windows computer right now without knowing that Perl exists.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
Work is ordered toward the good of persons. The programmer does not exist for the software, the company, or the market. Software, companies, and markets exist to serve human life and human communities. A technically impressive application which deceives its customers, degrades its workers, burdens its users, or treats persons merely as sources of data and revenue cannot be considered excellent craftsmanship.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
These names describe differences in skill, experience, and responsibility. They do not describe differences in human worth. The apprentice, journeyman, master, customer, and user possess the same inherent dignity. Greater mastery creates greater obligations of honesty, patience, justice, service, and care. It does not make one person more valuable than another.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A master should also understand that knowledge is not diminished when it is handed on. The formation of an apprentice does not create a competitor who has stolen part of the master&#039;s trade. It strengthens the craft, preserves accumulated experience, and prepares another person to perform useful work.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application which no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
He already understands that a network can fail, that data must be validated, that an upgrade can damage a working system, and that a user who reports a problem is not necessarily mistaken. These lessons are harder to acquire than the syntax for creating a button.&lt;br /&gt;
&lt;br /&gt;
Learning wxPerl does not erase the journeyman&#039;s experience. It gives that experience another visible form.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It is impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the dominant desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/worldwide StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It is also overwhelmingly prevalent among the participants in Valve&#039;s Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing configuration files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, backups, updates, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who installs a mod has begun to discover dependencies, version compatibility, file layouts, and the difference between a working installation and a broken one.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, graphics, automation, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
A healthy guild does not merely preserve the techniques of its existing members. It invites new apprentices, gives them real work appropriate to their abilities, and allows them to grow into responsibility.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or other applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
The desktop application and web application need not compete. Each can perform the work suited to it.&lt;br /&gt;
&lt;br /&gt;
The server may maintain shared data, perform expensive searches, coordinate users, apply centralized business rules, or execute processing which requires resources not available on the user&#039;s machine.&lt;br /&gt;
&lt;br /&gt;
The desktop application may manage local files, provide richer interaction, preserve partially completed work, integrate with the user&#039;s operating system, and continue performing some tasks when the network is unavailable.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands. Larger systems should support the user, the independent programmer, and the local organization where their resources are genuinely needed, without unnecessarily taking away work and responsibility which can be competently exercised at the more immediate level.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not require isolation. It must be joined to solidarity. The individual programmer, the guild, the toolmaker, the server operator, and the user may depend upon one another. The objective is not to abandon the smaller participant, but to strengthen him without absorbing every responsibility into a distant centralized system.&lt;br /&gt;
&lt;br /&gt;
The goal is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows has an unusually strong culture of backward application compatibility. Microsoft describes application compatibility as an intentional design concern and states that developers and customers expect applications they have invested in to continue working.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/key-changes-since-windows-7-to-ensure-compatibility Microsoft Learn, “Key changes since Windows 7 to ensure compatibility”]&amp;lt;/ref&amp;gt; Microsoft has also stated that it goes to great lengths to preserve application and device compatibility when operating-system versions change.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows application manifests can even allow newer versions of the operating system to provide behaviors expected by software targeting earlier releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, unavailable libraries, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
At times, Windows&#039; compatibility expectations appear even more extreme than Perl&#039;s own.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
The author&#039;s own experiments with ActivePerl 5.8.8 on Windows 98 illustrate the remarkable historical reach of both ecosystems. This does not mean that new commercial software should target Windows 98. It means that the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, forced upgrades, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction or a remote service has been discontinued.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention, collect data, or make cancellation difficult. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
The user&#039;s investment matters. The user may have spent hours learning the software, entering data, developing procedures, training employees, or creating records which must be preserved. Backward compatibility is therefore not merely a technical convenience. It is a way of respecting labor already performed.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application which starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths which work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program which works in the workshop&lt;br /&gt;
| A program which works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|-&lt;br /&gt;
| Personal knowledge of hidden dependencies&lt;br /&gt;
| A package containing everything the application needs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It comes out of the larger work of Perl Guilds: supporting independent Perl programmers who seek to make a living through their trade, preserve practical knowledge, and place powerful tools into the hands of individual craftsmen and smaller communities.&amp;lt;ref&amp;gt;Brett Estrade, “Perl Lazarus Project,” presentation prepared for the Summer 2026 Perl Community Conference, Austin, Texas.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name points first to Lazarus of the Bible, raised from the dead after four days. It is a fitting image for bringing renewed life to practical GUI development in Perl. The necessary modules and tools were not entirely gone, but the path among them had become difficult to see and difficult to follow.&lt;br /&gt;
&lt;br /&gt;
The name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, component libraries, documentation, packaging practices, examples, books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
The deeper inspiration is not merely the interface of an integrated development environment. It is the presence of a complete culture of application production.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, support, and the possibility of earning a livable wage through useful applications.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application&#039;s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
The language remains the craftsman&#039;s advantage. It does not need to become the customer&#039;s burden.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere in the [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]] material. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Wherefore I wished, and understanding was given me: and I called upon God, and the spirit of wisdom came upon me.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Wisdom 7:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly economic value added by human society is created through human labor acting upon the gifts of creation. A tool preserves earlier labor and allows new labor to be applied more effectively, but it does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
A compiler contains the accumulated labor of its authors and maintainers.&lt;br /&gt;
&lt;br /&gt;
A GUI designer preserves knowledge about widgets, layouts, serialization, and code generation.&lt;br /&gt;
&lt;br /&gt;
A Perl module contains work which another programmer has made reusable.&lt;br /&gt;
&lt;br /&gt;
An installer builder embodies years of experience with Windows installation, upgrades, shortcuts, permissions, and uninstallation.&lt;br /&gt;
&lt;br /&gt;
The virtuous programmer receives this earlier labor with gratitude, learns the terms under which it is offered, and gives its creators what is due to them. When a tool requests a reasonable commercial license, acknowledgment, contribution, or other form of support, the programmer should not ask only what he can legally avoid.&lt;br /&gt;
&lt;br /&gt;
The programmer who hopes to receive just compensation for his own labor should respect the labor which makes his work possible.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good.&lt;br /&gt;
&lt;br /&gt;
Profit can be good when it sustains useful work, supports a family, allows continued maintenance, and makes service possible. It becomes disordered when users, workers, customers, or communities are treated merely as instruments for obtaining it.&lt;br /&gt;
&lt;br /&gt;
Likewise, open-source and freely available tools are good, but their availability does not mean that no human labor stands behind them. A sustainable guild economy depends upon mutual recognition: craftsmen receive tools, instruction, examples, testing, and support from others, and they contribute labor, knowledge, payment, encouragement, or maintenance in return.&lt;br /&gt;
&lt;br /&gt;
Good craftsmanship joins competence with justice.&lt;br /&gt;
&lt;br /&gt;
The craft reaches its proper end when knowledge, tools, and labor are ordered toward truthful service of persons and communities.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What burden, error, or unmet need does the application address?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version which would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What continuing responsibility will you accept after delivering it?&lt;br /&gt;
# How will the application respect the user&#039;s data and previous labor?&lt;br /&gt;
# Could an apprentice learn something useful by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
# Would the price, support arrangement, or business model allow the programmer to continue serving its users without harming his family or neglecting other obligations?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product.&lt;br /&gt;
&lt;br /&gt;
A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
The first project might be:&lt;br /&gt;
&lt;br /&gt;
* a specialized file converter;&lt;br /&gt;
* a research tool;&lt;br /&gt;
* a desktop client for an existing Perl web application;&lt;br /&gt;
* a database front end;&lt;br /&gt;
* an image-processing utility;&lt;br /&gt;
* a scientific data viewer;&lt;br /&gt;
* an administrative console;&lt;br /&gt;
* a report generator;&lt;br /&gt;
* a collecting application;&lt;br /&gt;
* or a tool created for one profession, organization, or community.&lt;br /&gt;
&lt;br /&gt;
The value of a project does not depend upon millions of users. A tool may create substantial value by serving a small number of people whose work is important and whose needs are poorly understood by larger software vendors.&lt;br /&gt;
&lt;br /&gt;
The craftsman should begin close to the problem.&lt;br /&gt;
&lt;br /&gt;
Talk to the prospective user. Observe the existing work. Learn the vocabulary. Ask where mistakes occur, what consumes time, what information must be preserved, and what happens when the current process fails.&lt;br /&gt;
&lt;br /&gt;
The application should emerge from service to a real need, not from the desire to display technical cleverness.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, how the labor embodied in those tools makes new work possible, and why the chosen stack provides a practical route from Perl knowledge to a complete Windows application.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will then move from explanation to practice: installing the development environment, verifying wxPerl, adding wxGlade, establishing an efficient MSYS2 and vim workflow, generating Perl code, wiring an event, running the program under Strawberry Perl, and preserving the result in Git.&lt;br /&gt;
&lt;br /&gt;
The journey begins with an existing trade, a real human need, and the decision to bring useful work to completion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=372</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=372"/>
		<updated>2026-07-19T21:13:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The craft and the virtue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly economic value added by human society is created through human labor acting upon the gifts of creation. A tool preserves earlier labor and allows new labor to be applied more effectively, but it does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work. The final measure of the work is not merely technical efficiency or profit, but whether it truthfully and justly serves the persons and communities for whom it was made.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good. The craft reaches its proper end when knowledge, tools, and labor are ordered toward truthful service of persons and communities.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Template:Clear&amp;diff=371</id>
		<title>Template:Clear</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Template:Clear&amp;diff=371"/>
		<updated>2026-07-19T21:08:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=370</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=370"/>
		<updated>2026-07-19T21:08:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Perl Lazarus journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=369</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=369"/>
		<updated>2026-07-19T21:06:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Perl Lazarus journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png&lt;br /&gt;
 |thumb&lt;br /&gt;
 |right&lt;br /&gt;
 |420px&lt;br /&gt;
 |alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application&lt;br /&gt;
 |The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png&lt;br /&gt;
 |thumb&lt;br /&gt;
 |left&lt;br /&gt;
 |380px&lt;br /&gt;
 |alt=NHC Advisory Explorer running as a packaged Windows desktop application&lt;br /&gt;
 |The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Nhc-advisory-explorer-windows.png&amp;diff=368</id>
		<title>File:Nhc-advisory-explorer-windows.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Nhc-advisory-explorer-windows.png&amp;diff=368"/>
		<updated>2026-07-19T21:04:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Perl-lazarus-project-workflow.png&amp;diff=367</id>
		<title>File:Perl-lazarus-project-workflow.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Perl-lazarus-project-workflow.png&amp;diff=367"/>
		<updated>2026-07-19T21:04:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=366</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=366"/>
		<updated>2026-07-19T20:55:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a path which craftsmen can follow.&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|center|900px|alt=Workflow from installing the wxPerl stack through testing an installed Windows application|The Perl Lazarus Project follows the complete journey from installing the stack to testing an installed Windows application.]]&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|center|850px|alt=NHC Advisory Explorer running as a Windows desktop application|The NHC Advisory Explorer demonstrates a wxPerl application distributed for ordinary Windows use.]]&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=365</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=365"/>
		<updated>2026-07-19T20:41:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Technical Journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
1 [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
*: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
*: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
*: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=364</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=364"/>
		<updated>2026-07-19T20:40:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Technical Journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
1 [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=363</id>
		<title>Raising a Working wxPerl Shop on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=363"/>
		<updated>2026-07-19T20:39:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Previous essay:&amp;#039;&amp;#039;&amp;#039; The Perl Lazarus Workshop  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  Category:The Virtuous Perl Programmer Category:Perl Lazarus Project Category:wxPerl&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=362</id>
		<title>The Perl Lazarus Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=362"/>
		<updated>2026-07-19T20:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Previous essay:&amp;#039;&amp;#039;&amp;#039; The Perl Craftsman Returns to the Windows Desktop  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  &amp;#039;&amp;#039;&amp;#039;Next essay:&amp;#039;&amp;#039;&amp;#039; Raising a Working wxPerl Shop on Windows  Category:The Virtuous Perl Programmer Category:Perl Lazarus Project Category:wxPerl&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=361</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=361"/>
		<updated>2026-07-19T20:39:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=360</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=360"/>
		<updated>2026-07-19T20:38:45Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  &amp;#039;&amp;#039;&amp;#039;Next essay:&amp;#039;&amp;#039;&amp;#039; The Perl Lazarus Workshop&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=359</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=359"/>
		<updated>2026-07-19T20:38:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;== The Technical Journey ==  # The Perl Craftsman Returns to the Windows Desktop #: &amp;#039;&amp;#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&amp;#039;&amp;#039;  # The Perl Lazarus Workshop #: &amp;#039;&amp;#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&amp;#039;&amp;#039;  # Raising a Working wxPerl Shop on Windows|R...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=358</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=358"/>
		<updated>2026-07-19T20:27:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* General Audience Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=357</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=357"/>
		<updated>2026-07-19T20:27:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* General Audience Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:Essays on The Virtuous Perl Programmer|Essays on The Virtuous Perl Programmer]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=356</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=356"/>
		<updated>2026-07-10T16:25:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:New Users|New Users]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-3.png&amp;diff=355</id>
		<title>File:Wxglade-nhc-advisory-explorer-3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-3.png&amp;diff=355"/>
		<updated>2026-07-06T05:53:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-2.png&amp;diff=354</id>
		<title>File:Wxglade-nhc-advisory-explorer-2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-2.png&amp;diff=354"/>
		<updated>2026-07-06T05:53:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-1.png&amp;diff=353</id>
		<title>File:Wxglade-nhc-advisory-explorer-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-1.png&amp;diff=353"/>
		<updated>2026-07-06T05:52:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netcdf-explorer.png&amp;diff=352</id>
		<title>File:Wxglade-netcdf-explorer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netcdf-explorer.png&amp;diff=352"/>
		<updated>2026-07-06T05:50:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-limewire-style-interface.png&amp;diff=351</id>
		<title>File:Wxglade-limewire-style-interface.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-limewire-style-interface.png&amp;diff=351"/>
		<updated>2026-07-06T05:50:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-wsftp-clone.png&amp;diff=350</id>
		<title>File:Wxglade-wsftp-clone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-wsftp-clone.png&amp;diff=350"/>
		<updated>2026-07-05T07:27:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-putty-configuration-pane.png&amp;diff=349</id>
		<title>File:Wxglade-putty-configuration-pane.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-putty-configuration-pane.png&amp;diff=349"/>
		<updated>2026-07-05T07:27:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netscape-clone.png&amp;diff=348</id>
		<title>File:Wxglade-netscape-clone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netscape-clone.png&amp;diff=348"/>
		<updated>2026-07-05T07:26:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-windows-help-gui.png&amp;diff=347</id>
		<title>File:Wxglade-windows-help-gui.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-windows-help-gui.png&amp;diff=347"/>
		<updated>2026-07-05T07:26:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>