<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Unstack]]></title><description><![CDATA[Notes on projects, apps, and the things we build.]]></description><link>https://unstack.io/</link><image><url>https://unstack.io/favicon.png</url><title>Unstack</title><link>https://unstack.io/</link></image><generator>Unstack</generator><lastBuildDate>Tue, 26 May 2026 15:00:57 GMT</lastBuildDate><atom:link href="https://unstack.io/rss" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Theseus Slop]]></title><description><![CDATA[<p>There has been a very active debate (<a href="https://news.ycombinator.com/item?id=48019025" target="_blank" rel="noopener noreferrer nofollow">1</a>, <a href="https://arxiv.org/abs/2505.19443" target="_blank" rel="noopener noreferrer nofollow">2</a>, <a href="https://addyo.substack.com/p/treat-ai-generated-code-as-a-draft" target="_blank" rel="noopener noreferrer nofollow">3</a>) on how useful AI is for programming. It speeds up development, but sometimes at the cost of quality and understanding what you are building.</p>
<p>I'm seeing more and more cases where engineers take an existing or legacy codebase and use</p>]]></description><link>https://unstack.io/theseus-slop</link><guid isPermaLink="false">4</guid><dc:creator><![CDATA[Scott Robinson]]></dc:creator><pubDate>Tue, 26 May 2026 02:39:26 GMT</pubDate><content:encoded><![CDATA[<p>There has been a very active debate (<a href="https://news.ycombinator.com/item?id=48019025" target="_blank" rel="noopener noreferrer nofollow">1</a>, <a href="https://arxiv.org/abs/2505.19443" target="_blank" rel="noopener noreferrer nofollow">2</a>, <a href="https://addyo.substack.com/p/treat-ai-generated-code-as-a-draft" target="_blank" rel="noopener noreferrer nofollow">3</a>) on how useful AI is for programming. It speeds up development, but sometimes at the cost of quality and understanding what you are building.</p>
<p>I'm seeing more and more cases where engineers take an existing or legacy codebase and use AI to refactor, optimize, and improve it. Over time, the codebase hardly resembles the original in design, implementation, and sometimes architecture. Sure, it still deploys and passes tests, and it still lives in the same repo. But in many cases the developers don't actually understand how it works anymore.</p>
<p>I want a term for this: <strong>Theseus Slop</strong>.</p>
<p><strong>Theseus Slop</strong> is what happens when LLMs gradually replace the code in a system you already had, eventually replacing almost every line of code, function, and file, until it feels like a different codebase altogether. Unlike vibe coding a project from scratch, this usually begins with code that you understand and ends with code that you do not.</p>
<p><img src="https://s3.unstack.io/theseus-slop-2.png" alt="Theseus Slop: Code replaced line by line"></p>
<p>Maybe you've seen this by now: a legacy service gets "modernized" over a few months, the domain is still the same, the repo name is unchanged, but the auth flow, API integrations, error handling, and even folder layout feel foreign. You can ship features, but you can't explain why a particular guard clause exists.</p>
<h2 id="wherethenamecomesfrom">Where the name comes from</h2>
<p>The term comes from the <a href="https://en.wikipedia.org/wiki/Ship_of_Theseus" target="_blank" rel="noopener noreferrer nofollow">Ship of Theseus</a>, also called Theseus's Paradox, a thought experiment about identity and change. In the paradox, a ship is gradually repaired by replacing each part with a new one, until nothing of the original remains. That raises two questions:</p>
<ul>
<li>Is the ship with all new parts still the same Ship of Theseus?</li>
<li>If it is not, at exactly what point did it stop being the original?</li>
</ul>
<p><img src="https://s3.unstack.io/theseus-slop-1.png" alt="Theseus Ship: A ship repaired plank by plank"></p>
<p>There is no clean answer. It depends what you mean by "the same". Same exact design? Same functionality? Same crew or name on the boat?</p>
<p>Vibe coding does something similar at a glance, but Theseus Slop is the slower version on code you already owned: each piece swapped out until the whole is unfamiliar, with no single moment where anyone called it a rewrite.</p>
<p>You cannot name the exact commit where your understanding ended, any more than you can name the plank that ended the original ship.</p>
<h2 id="thequestions">The questions</h2>
<p>The same two questions apply to codebases.</p>
<p><strong>Is it the same codebase?</strong> You can see the Git history and how the codebase has evolved over time. The product name and deployment target are all the same. But the structure of modules, the patterns for I/O, and the implicit conventions or even overall style may not be. Under one set of criteria - continuous version control, same overall functionality - you have one system. Under another - shared mental model among the people who maintain it - you may have replaced it without ever declaring a rewrite. You might not even realize it until you try to explain how it works to someone else.</p>
<p><strong>Is it still yours?</strong> You wrote much of the first version. You approved all of the AI's generated diffs. Ownership in that sense is intact. Yet "yours" also means you made all of the design decisions and can reason about it when asked: trace a bug, reject a bad abstraction, explain a tradeoff in review. Theseus Slop is the gap between owning the repo and understanding how it works. The code is in your repo, but the design decisions are not in your head.</p>
<h2 id="whendoesitmatter">When does it matter?</h2>
<p>What's the counterargument?</p>
<p>The old ship (code) needed replacing. If it's truly a legacy project, then it's already a liability. If AI-assisted refactors fix bugs, remove dead paths, shrink modules, or align the system with how the product works today, the replacement may be an improvement in every measurable way. Yes, potential confusion among maintainers is a cost, but so was paralysis around code everyone was too afraid to edit.</p>
<p>I would guess some teams argue the gap does not matter much if the repo has a solid set of tests, types, and documentation. You don't need to keep the old architecture in your head if behavior is well known and well documented.</p>
<p>It seems to me that both points hold in many projects. The disagreement is not whether AI can improve code - it clearly can - but whether the remaining gap in understanding matters for <em>your</em> situation.</p>
<p>There are other factors to consider as well:</p>
<p><strong>Stakes.</strong> Theseus Slop hurts when you must debug under pressure, review security-sensitive changes, onboard a new engineer, or work through an audit that requires you to know <em>how</em> the system works and not just what it does. It doesn't matter as much when you are throwing together a prototype, exploring an idea for a weekend, or just writing a one-off script.</p>
<p><strong>Scale.</strong> A solo developer working on a small tool can better handle an unfamiliar structure. The complexity is usually less anyway. But a team on a long-lived, critical production system magnifies the problem: there is no subject matter expert who can answer questions about their section of the codebase and you must rely on AI to regurgitate an accurate explanation back to you.</p>
<h2 id="whynameit">Why name it</h2>
<p>My attempt to coin the term "Theseus Slop" is not an argument against using AI on existing code. But it's a label for a certain outcome: incremental replacement (without thorough review) at the expense of comprehension. For any important project, it's a risk that needs to be understood and avoided. For everything else, it's a risk that needs to be managed.</p>
]]></content:encoded></item><item><title><![CDATA[Terms of Service]]></title><description><![CDATA[<h2 id="thegist">The Gist</h2>
<p>Unstack Software LLC ("Unstack", "we", "us", or "our") operates <a href="https://unstack.io/" target="_blank" rel="noopener noreferrer nofollow">unstack.io</a> (the "Site"), a blog and content site. We hope you ("You" or "Your") enjoy reading it. Please use the Site responsibly. If you post comments or other content, keep it lawful and respectful. We may remove content</p>]]></description><link>https://unstack.io/terms</link><guid isPermaLink="false">3</guid><dc:creator><![CDATA[Scott Robinson]]></dc:creator><pubDate>Sat, 16 May 2026 19:10:13 GMT</pubDate><content:encoded><![CDATA[<h2 id="thegist">The Gist</h2>
<p>Unstack Software LLC ("Unstack", "we", "us", or "our") operates <a href="https://unstack.io/" target="_blank" rel="noopener noreferrer nofollow">unstack.io</a> (the "Site"), a blog and content site. We hope you ("You" or "Your") enjoy reading it. Please use the Site responsibly. If you post comments or other content, keep it lawful and respectful. We may remove content or restrict access if you don't.</p>
<p>The articles, posts, and other materials on the Site are for general information and entertainment. They are not professional advice. Your use of the Site is at your own risk.</p>
<p>These Terms of Use (the "Terms"), the Site, and our practices may change from time to time. We will try to warn you about material changes, but we make no guarantees.</p>
<p>That's the basic idea, but You must read through the entire document below and agree with all the details before You use the Site.</p>
<h2 id="youragreementwithunstack">Your Agreement with Unstack</h2>
<p>Your use of the Site is governed by these Terms. The "Service" means the Site at <a href="https://unstack.io/" target="_blank" rel="noopener noreferrer nofollow">https://unstack.io/</a> and its subdomains, including all pages, articles, posts, media, and any features we make available in connection with the Site (such as comments, sharing controls, newsletters, search, or other interactive elements).</p>
<p>By accessing or using the Service, You agree to these Terms. If You do not agree, do not use the Service.</p>
<p>Unstack may change the Terms from time to time. If we make material changes, we may post the updated Terms on the Site and update the effective date. Your continued use of the Service after the changes take effect constitutes acceptance of the updated Terms. If You do not agree to the changes, stop using the Service.</p>
<p>If you have any questions about the Terms, please contact us at <a href="mailto:support@unstack.io">support@unstack.io</a>.</p>
<h2 id="whomayusethesite">Who May Use the Site</h2>
<ul>
<li>You may not use the Service if You are barred from receiving services under the laws of the United States or other applicable countries, including the country in which You are resident or from which You use the Service.</li>
<li>You must be at least 13 years old to use the Service. If You are under 18, You represent that You have your parent or guardian's permission to use the Service.</li>
<li>If You create an account or submit content that requires registration, You must provide accurate information and You must be a human. Accounts or submissions created by automated methods are not permitted except where we explicitly allow them.</li>
</ul>
<h2 id="useofthesite">Use of the Site</h2>
<ul>
<li>Your use of the Service must comply with all applicable laws, regulations, and ordinances.</li>
<li>You agree not to engage in any activity that interferes with or disrupts the Service, including attempting to overload, scrape, or probe our systems without permission.</li>
<li>You may not use the Service to transmit malware, spam, or unsolicited communications.</li>
<li>You may not attempt to gain unauthorized access to any part of the Service, other users' accounts, or our systems or networks.</li>
<li>We may limit or suspend access to the Service, or remove content, at our sole discretion, with or without notice.</li>
</ul>
<h2 id="commentsandusercontent">Comments and User Content</h2>
<p>The Service may allow You to post comments, feedback, or other material ("User Content"). You retain ownership of Your User Content, but by submitting it You grant Unstack a worldwide, non-exclusive, royalty-free, perpetual license to use, host, store, reproduce, modify, publish, display, and distribute Your User Content solely as needed to operate, promote, and improve the Service.</p>
<p>You represent and warrant that:</p>
<ul>
<li>You own or have the necessary rights to submit Your User Content;</li>
<li>Your User Content does not violate these Terms or any applicable law; and</li>
<li>Your User Content does not infringe the intellectual property, privacy, or other rights of any third party.</li>
</ul>
<p>You agree not to submit User Content that is unlawful, defamatory, harassing, hateful, obscene, fraudulent, misleading, or that promotes illegal activity or violence. We do not pre-screen User Content and are not responsible for it. We may remove or refuse any User Content at any time, for any reason or no reason.</p>
<h2 id="interactivefeatureslinksandsharing">Interactive Features, Links, and Sharing</h2>
<p>The Service may include links to third-party websites, embedded content, social sharing buttons, comment systems, newsletters, or other interactive features. These features may be operated by us or by third parties. Your use of third-party features may be subject to those parties' terms and privacy policies.</p>
<p>When You use sharing or embed features, You understand that content may be visible on third-party platforms according to those platforms' settings and policies. We are not responsible for how third parties handle information You choose to share.</p>
<h2 id="privacyandanalytics">Privacy and Analytics</h2>
<p>The Service is subject to our Privacy Policy, available at <a href="https://unstack.io/privacy" target="_blank" rel="noopener noreferrer nofollow">https://unstack.io/privacy</a> (the "Privacy Policy"), which is incorporated into these Terms by reference. The Privacy Policy describes how we collect, use, and share information, including through cookies and typical website analytics.</p>
<p>By using the Service, You agree to our collection and use of information as described in the Privacy Policy. Where required by law, we will seek Your consent for certain uses of cookies or similar technologies.</p>
<h2 id="ideasandfeedback">Ideas and Feedback</h2>
<p>You may choose to, or we may invite You to, submit comments or ideas about the Service or our content ("Ideas"). By submitting any Idea, You agree that Your disclosure is unsolicited and without restriction, that it will not place Unstack under any fiduciary or other obligation, and that we are free to use the Idea without additional compensation to You, including on a non-confidential basis.</p>
<h2 id="modificationofthesite">Modification of the Site</h2>
<ul>
<li>You acknowledge that the Service may change from time to time without prior notice, including the addition or removal of features, content, or design.</li>
<li>Unstack shall not be liable to You or any third party for any modification, suspension, or discontinuance of the Service or any part of it.</li>
</ul>
<h2 id="externalresources">External Resources</h2>
<p>The Service may include hyperlinks to other websites, content, resources, or email content. Unstack is not responsible for the availability, accuracy, or practices of any external sites or resources and does not endorse advertising, products, or other materials on or available from them.</p>
<h2 id="licensefromunstackandrestrictions">License from Unstack and Restrictions</h2>
<p>All content available on or through the Service, including without limitation text, photographs, graphics, logos, trade and service marks, and audiovisual content, is owned or controlled by Unstack, its licensors, or other rights holders and is protected by copyright, trademark, and other laws. You acknowledge that the Service and any underlying technology contain our proprietary information.</p>
<p>Subject to Your compliance with these Terms, we grant You a personal, worldwide, royalty-free, non-assignable, non-exclusive license to access and use the Service for Your personal, non-commercial use (unless we expressly permit otherwise in writing).</p>
<p>You may not (and may not permit anyone else to):</p>
<ul>
<li>copy, modify, distribute, publicly display, or create derivative works from our content except as permitted by law or with our prior written permission;</li>
<li>remove any copyright, trademark, or other proprietary notices;</li>
<li>use any robot, spider, scraper, or other automated means to access or index the Service in a manner that burdens our systems or violates these Terms, except for standard search-engine indexing where allowed by our robots rules;</li>
<li>reformat or frame any portion of the Site;</li>
<li>use the Service for commercial purposes not permitted under these Terms;</li>
<li>impersonate Unstack, any of our employees or representatives, or any other person or entity; or</li>
<li>collect or store personal data about other users except as permitted by these Terms and applicable law.</li>
</ul>
<h2 id="ourcopyrightdisputepolicy">Our Copyright Dispute Policy</h2>
<p>Unstack respects the intellectual property of others and expects users to do the same. If You believe that material on the Service infringes Your copyright, please send a notice containing the following to our Designated Copyright Agent:</p>
<ul>
<li>identification of the copyrighted work claimed to have been infringed, or, if multiple works are covered by a single notification, a representative list;</li>
<li>identification of the claimed infringing material and information reasonably sufficient to permit us to locate it (providing the URL(s) satisfies this requirement);</li>
<li>information reasonably sufficient to permit us to contact You, such as an address, telephone number, and email address;</li>
<li>a statement that You have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;</li>
<li>a statement, made under penalty of perjury, that the information in Your notification is accurate and that You are the copyright owner or authorized to act on the owner's behalf; and</li>
<li>Your physical or electronic signature.</li>
</ul>
<p>Our Designated Copyright Agent can be reached at: Unstack Software LLC, Attn: Copyright Agent, <a href="mailto:legal@unstack.io">legal@unstack.io</a>.</p>
<h2 id="linkstootherwebsites">Links to Other Websites</h2>
<p>The Service may contain links to other websites ("Third Party Sites"). Unstack does not endorse, verify, or assume responsibility for Third Party Sites or any products, services, or content on them. If You follow a link to a Third Party Site, You do so at Your own risk and may be subject to that site's terms and policies. You should review the privacy and other policies of any Third Party Site You visit. Concerns regarding a Third Party Site should be directed to that site.</p>
<h2 id="disclaimerofwarranties">Disclaimer of Warranties</h2>
<p>IF YOU ACCESS THE SERVICE, YOU DO SO AT YOUR OWN RISK. WE PROVIDE THE SERVICE "AS IS", "WITH ALL FAULTS", AND "AS AVAILABLE." WE MAKE NO EXPRESS OR IMPLIED WARRANTIES OR GUARANTEES ABOUT THE SERVICE OR ANY CONTENT ON IT. TO THE MAXIMUM EXTENT PERMITTED BY LAW, WE DISCLAIM ALL SUCH WARRANTIES, INCLUDING STATUTORY WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, AND NON-INFRINGEMENT.</p>
<p>WE DO NOT GUARANTEE THAT THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE, OR THAT CONTENT WILL BE ACCURATE, COMPLETE, OR CURRENT. CONTENT ON THE SITE REFLECTS THE AUTHORS' VIEWS AT THE TIME OF PUBLICATION AND MAY NOT BE SUITABLE FOR EVERY PURPOSE. NOTHING ON THE SITE IS LEGAL, FINANCIAL, MEDICAL, OR OTHER PROFESSIONAL ADVICE.</p>
<h2 id="limitationsonliability">Limitations on Liability</h2>
<p>YOUR SOLE AND EXCLUSIVE REMEDY FOR ANY DISPUTE WITH US IS TO STOP USING THE SERVICE. IN NO EVENT SHALL OUR TOTAL CUMULATIVE LIABILITY TO YOU FOR ANY AND ALL CLAIMS RELATING TO OR ARISING OUT OF YOUR USE OF THE SERVICE, REGARDLESS OF THE FORM OF ACTION, EXCEED ONE HUNDRED DOLLARS ($100).</p>
<p>IN NO EVENT SHALL WE BE LIABLE TO YOU (OR ANY THIRD PARTY CLAIMING THROUGH YOU) FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, OR EXEMPLARY DAMAGES, OR ANY DAMAGES FOR LOST PROFITS, LOST DATA, LOSS OF GOODWILL, OR PERSONAL INJURY, ARISING FROM YOUR USE OF OR INABILITY TO USE THE SERVICE, EVEN IF WE KNEW OR SHOULD HAVE KNOWN OF THE POSSIBILITY OF SUCH DAMAGES.</p>
<p>BECAUSE SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, IN SUCH JURISDICTIONS OUR LIABILITY SHALL BE LIMITED TO THE EXTENT PERMITTED BY LAW.</p>
<p>IF YOU ARE A CALIFORNIA RESIDENT, YOU WAIVE CALIFORNIA CIVIL CODE SECTION 1542, WHICH PROVIDES THAT A GENERAL RELEASE DOES NOT EXTEND TO CLAIMS THAT THE CREDITOR DOES NOT KNOW OR SUSPECT TO EXIST IN HIS OR HER FAVOR AT THE TIME OF EXECUTING THE RELEASE.</p>
<h2 id="indemnification">Indemnification</h2>
<p>You agree to hold harmless and indemnify Unstack Software LLC and its affiliates, officers, agents, employees, and partners from and against any third-party claim arising from or related to (a) Your breach of these Terms, (b) Your User Content, or (c) Your use of the Service or violation of applicable law, including any liability or expense arising from claims, losses, damages, suits, judgments, litigation costs, and attorneys' fees. In such a case, Unstack will provide You with written notice of the claim where reasonably practicable.</p>
<h2 id="choiceoflawanddisputeresolution">Choice of Law and Dispute Resolution</h2>
<p>These Terms shall be governed by and construed in accordance with the laws of the State of Nebraska, without regard to conflict-of-law principles, as applied to contracts made and performed entirely within Nebraska.</p>
<p>Any controversy, dispute, or claim arising out of or related to these Terms, the Privacy Policy, or the Service shall be settled by final and binding arbitration in Douglas County, Nebraska, pursuant to the rules of the American Arbitration Association, except that either party may seek injunctive relief in a court of competent jurisdiction. Any disputes shall be resolved individually, without resort to any form of class action.</p>
<h2 id="generallegalterms">General Legal Terms</h2>
<p>These Terms, together with the Privacy Policy, constitute the entire agreement between You and Unstack regarding the Service and supersede any prior agreements on the subject.</p>
<p>If any part of these Terms is held invalid or unenforceable, that portion shall be construed to reflect the parties' intentions as nearly as possible, and the remaining portions shall remain in full force and effect.</p>
<p>The failure of Unstack to exercise or enforce any right or provision of these Terms shall not constitute a waiver of such right or provision.</p>
<p>Unstack shall not be liable for failing or delaying performance resulting from any condition beyond our reasonable control, including governmental action, acts of terrorism, natural disasters, labor conditions, power failures, or Internet disturbances.</p>
<p>We may assign this agreement at any time to any parent, subsidiary, affiliate, or successor, or in connection with a merger, sale, or other transfer of our business. You may not assign Your rights under these Terms without our prior written consent.</p>
]]></content:encoded></item><item><title><![CDATA[Privacy Policy]]></title><description><![CDATA[<h2 id="overview">Overview</h2>
<p>Unstack Software LLC will collect certain non-personally identifiable information about you as you use our sites. We may use this data to better understand our users. We can also publish this data, but the data will be about a large group of users, not individuals. We may also collect</p>]]></description><link>https://unstack.io/privacy</link><guid isPermaLink="false">2</guid><dc:creator><![CDATA[Scott Robinson]]></dc:creator><pubDate>Fri, 15 May 2026 21:36:25 GMT</pubDate><content:encoded><![CDATA[<h2 id="overview">Overview</h2>
<p>Unstack Software LLC will collect certain non-personally identifiable information about you as you use our sites. We may use this data to better understand our users. We can also publish this data, but the data will be about a large group of users, not individuals. We may also collect certain personal information about you and your use of the Service (as defined herein) which may be published and used in the aggregate as set forth in this Privacy Policy.</p>
<p>We will also ask you to provide personal information, but you'll always be able to opt out. If you give us personal information, we won't do anything evil with it.</p>
<p>We can also use cookies, but you can choose not to store these.</p>
<p>Unstack Software makes available services include our web sites (<a href="https://unstack.io" target="_blank" rel="noopener noreferrer nofollow">https://unstack.io</a> (the "Site")), our blog, our API, our dashboard, and any other software, sites, and services offered by Unstack Software in connection to any of those (taken together, the "Service"). It is Unstack Software's policy to respect your privacy regarding any information we may collect while operating our Site.</p>
<h2 id="questions">Questions</h2>
<p>If you have question about this Privacy Policy, please contact us at <a href="mailto:support@unstack.io">support@unstack.io</a>.</p>
<h2 id="visitors">Visitors</h2>
<p>Like most website operators, Unstack Software collects non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request. Unstack Software's purpose in collecting non-personally identifying information is to better understand how Unstack Software's visitors use its website. From time to time, Unstack Software may release non-personally-identifying information in the aggregate, e.g., by publishing a report on trends in the usage of its website.</p>
<p>Unstack Software also collects potentially personally-identifying information like Internet Protocol (IP) addresses. Unstack Software does not use such information to identify its visitors, however, and does not disclose such information, other than under the same circumstances that it uses and discloses personally-identifying information, as described below. We may also collect and use IP addresses to block users who violated our Terms of Service.</p>
<h2 id="gatheringofpersonallyidentifyinginformation">Gathering of Personally-Identifying Information</h2>
<p>Certain visitors to Unstack Software's websites choose to interact with Unstack Software in ways that require Unstack Software to gather personally-identifying information, such as names and email addresses. The amount and type of information that Unstack Software gathers depends on the nature of the interaction. Unstack Software collects such information only insofar as is necessary or appropriate to fulfill the purpose of the visitor's interaction with Unstack Software. Unstack Software does not disclose personally-identifying information other than as described below. And visitors can always refuse to supply personally-identifying information, with the caveat that it may prevent them from engaging in certain Service-related activities.</p>
<p>Additionally, some interactions, such as posting a comment, may ask for optional personal information. For instance, when posting a comment, may provide a website that will be displayed along with a user's name when the comment is displayed. Supplying such personal information is completely optional and is only displayed for the benefit and the convenience of the user.</p>
<h2 id="aggregatedstatistics">Aggregated Statistics</h2>
<p>Unstack Software may collect statistics about the behavior of visitors to and users of the Service. For instance, Unstack Software may monitor and store data about the most popular parts of the Unstack Software Site or other statistics. Unstack Software may display this information publicly or provide it to others.</p>
<p>In addition, Unstack Software may, from time to time, collect certain personal information from you or your company and/or your use of the Services (your "Data"). Unstack Software may publish and display your Data in the aggregate to the public through our Site or on our blog. However, all Data is only used and published in the aggregate which means that any published Data will not identify you, your company, or link you to the published information in any way.</p>
<p>Unstack Software does not disclose personally-identifying information other than as described below.</p>
<h2 id="protectionofcertainpersonallyidentifyinginformation">Protection of Certain Personally-Identifying Information</h2>
<p>Unstack Software discloses potentially personally-identifying and personally-identifying information only to those of its employees and contractors that (i) need to know that information in order to process it on Unstack Software's behalf or to provide services available at Unstack Software's Site websites, and (ii) that have agreed not to disclose it to others. Some of those employees and contractors may be located outside of your home country; by using the Service, you consent to the transfer of such information to them. Unstack Software will not rent or sell potentially personally-identifying and personally-identifying information to anyone. Other than to its employees, contractors, and affiliated organizations, as described above, Unstack Software discloses potentially personally-identifying and personally-identifying information only when required to do so by law, or when Unstack Software believes in good faith that disclosure is reasonably necessary to protect the property or rights of Unstack Software, third parties or the public at large.</p>
<p>If you are a registered reseller or newsletter subscriber and have supplied your email address, Unstack Software may occasionally send you an email to tell you about new features, solicit your feedback, or just keep you up to date with what's going on with Unstack Software and our products. We primarily use our website and blog to communicate this type of information, so we expect to keep this type of email to a minimum. If you send us a request (for example via a support email or via one of our feedback mechanisms), we reserve the right to anonymize and publish it in order to help us clarify or respond to your request or to help us support other users. Unstack Software takes all measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of potentially personally-identifying and personally-identifying information.</p>
<h2 id="cookies">Cookies</h2>
<p>A cookie is a string of information that a website stores on a visitor's computer, and that the visitor's browser provides to the Service each time the visitor returns. Unstack Software uses cookies to help Unstack Software identify and track visitors, their usage of Unstack Software Service, and their Service access preferences. Unstack Software visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using Unstack Software's websites, with the drawback that certain features of Unstack Software's websites may not function properly without the aid of cookies.</p>
<h2 id="businesstransfers">Business Transfers</h2>
<p>If Unstack Software, or substantially all of its assets, were acquired, or in the unlikely event that Unstack Software goes out of business or enters bankruptcy, user information would be one of the assets that is transferred or acquired by a third party. You acknowledge that such transfers may occur, and that any acquirer of Unstack Software may continue to use your personal information as set forth in this policy.</p>
<h2 id="datatransmissionsecurityandstorage">Data Transmission, Security, and Storage</h2>
<p>Unstack Software uses third party vendors and hosting partners to provide the necessary hardware, software, networking, storage, and related technology required to run the Service. You understand that although you retain full rights to your data, it may be stored on third party storage and transmitted through third party networks.</p>
<p>It is extremely difficult to guarantee the complete security of data transmitted through the Internet, via mobile devices, or through the physical transfer of information. While we will take precautions to limit security risks, we can not fully eliminate all security risks associated with personal information. We do not guarantee or warrant the security of any data or information transmitted to us by you, and you do so at your own risk.</p>
<h2 id="privacypolicychanges">Privacy Policy Changes</h2>
<p>Although most changes are likely to be minor, Unstack Software may change its Privacy Policy from time to time, and at Unstack Software's sole discretion. Unstack Software encourages visitors to frequently check this page for any changes to its Privacy Policy.</p>
]]></content:encoded></item><item><title><![CDATA[Halt and Catch Fire]]></title><description><![CDATA[<p>I have never watched the AMC show <em>Halt and Catch Fire</em>, and for a long time I only knew the title, but nothing about the show. Something about it always reminded me of programmer humor: somewhat dramatic, a little absurd, and weirdly precise. Turns out, the show really is about</p>]]></description><link>https://unstack.io/halt-and-catch-fire</link><guid isPermaLink="false">1</guid><dc:creator><![CDATA[Scott Robinson]]></dc:creator><pubDate>Fri, 15 May 2026 21:31:58 GMT</pubDate><content:encoded><![CDATA[<p>I have never watched the AMC show <em>Halt and Catch Fire</em>, and for a long time I only knew the title, but nothing about the show. Something about it always reminded me of programmer humor: somewhat dramatic, a little absurd, and weirdly precise. Turns out, the show really is about the computer industry in the 1980s and 1990s, but the phrase itself is much older than the show, and it started as some engineering humor.</p>
<h2 id="whatitmeans">What it means</h2>
<p>In the context of computers, <strong>Halt and Catch Fire</strong> (shortened to <strong>HCF</strong>) has been generalized to describe machine-code that causes the CPU to stop doing anything useful, forcing you to only recover by resetting (or power-cycling) the machine. In a pretty literal sense, it "halts" the machine. Sure, the "catch fire" part is a joke, but it's not as far-fetched as it might seem. Take the IBM System/360 for example. Apparently when this system would encounter a certain invalid opcode, it would constantly access a specific location in the magnetic core memory, which caused it to get very hot and even catch on fire.</p>
<p>Over time, <strong>HCF</strong> also became a catch-all label for undocumented or invalid opcodes that lock up the processor, intentional test modes that look like a hang, and real hardware bugs (you might even recall that some early Pentium-class chips could be locked up with a carefully chosen illegal instruction, known as the F00F bug - more on that later).</p>
<p>The phrase was created, in part, because of the standard of using three-letter assembly mnemonics: <code>ADD</code>, <code>CMP</code>, <code>JMP</code>, etc. The joke spread in various publications, including <strong>HCF</strong> alongside some other personal favorites of mine:</p>
<ul>
<li><code>EPI</code>: Execute Programmer Immediately</li>
<li><code>DC</code>: Divide and Conquer</li>
<li><code>CRN</code>: Convert to Roman Numerals</li>
</ul>
<h2 id="themotorola6800">The Motorola 6800</h2>
<p>So <strong>HCF</strong> was mostly just a joke, until it wasn't.</p>
<p>The Motorola 6800 has 256 single-byte opcodes, but not every bit pattern corresponds to a documented instruction. Hit the wrong one and the chip does whatever the silicon "decodes" into — sometimes nothing much, sometimes something significant.</p>
<p>Gerry Wheeler's <em>BYTE</em> piece <strong>"Undocumented M6800 Instructions"</strong> ran in <strong>December 1977</strong>, volume <strong>2</strong> number <strong>12</strong>, in the <strong>Technical Forum</strong> on <strong>pages 46–47</strong>. He starts from Motorola's own docs: <strong>197</strong> documented opcodes, which leaves <strong>59</strong> bit patterns unaccounted for in the official story. Some of those behave like NOPs, some change the condition-code register in patterns Wheeler said were still "undeciphered" at the time, and two bytes — <code>$9D</code> and <code>$DD</code> — share one especially nasty outcome he chose to call <strong>Halt and Catch Fire</strong>. He is explicit that "The mnemonics are, of course, assigned by me."</p>
<p>What actually happens, in hardware terms, is that the part stops behaving like a normal fetch–decode–execute engine: the program counter keeps advancing and the chip issues <em>reads</em> while the address lines march through memory like a hardware counter. Interrupts will not stop you from your path of self-destruction - you only get out of the loop with a reset or power cycle. Wheeler's own description is worth reading in the original, rather than paraphrasing:</p>
<blockquote>
<p>When this instruction is run the only way to see what it is doing is with an oscilloscope. From the user's point of view the machine halts and defies most attempts to get it restarted. Those persons with indicator lamps on the address bus will see that the processor begins to read all of the memory, sequentially, very quickly. In effect, the address bus turns into a 16 bit counter. However, the processor takes no notice of what it is reading... it just reads.</p>
</blockquote>
<p>On the "catch fire" half of the phrase, he adds, <em>"Well, almost."</em> While the IBM system did catch fire in cases, it seems that the Motorola 6800 did not.</p>
<p>Outside <em>BYTE</em>, the same opcode family picked up other nicknames. David J. Agans, in <em>Debugging</em> (2002), remembers <strong><code>DD</code></strong> as what his team called the <em>"Drop Dead"</em> instruction—same bus-walking trick, different name—and notes that engineers used it deliberately because <em>"all of the address and clock lines were nice, cycling square waves"</em> on a scope.</p>
<p>Most machines only <em>feel</em> like they hang. On at least one early 6800 microcomputer with finicky memory-mapped video, the pattern can show up as visible "snow". Ben Z's <a href="https://sphere.computer/news/2025-04-04-halt-and-catch-fire.html" target="_blank" rel="noopener noreferrer nofollow">Sphere News article</a> is a great rabbit hole to go down (video RAM arbitration, timing, CRT artifacts).</p>
<p>Years later, Motorola engineers wrote more about this same issue. In <em>IEEE Design &amp; Test</em> (1985), Daniels and Bruce describe an illegal opcode that customers found on the MC6800, internally nicknamed <strong>HACOF</strong>, where the program counter could increment forever until reset. They also tell of a detail that's almost hard to believe: product engineering wanted a fast way to scan RAM during bring-up, recognized this behavior already did something like that, and basically kept it instead of paying to remove it. So, in the words of Bob Ross, this turned out to be a "happy accident".</p>
<p>More recently, someone actually put a real MC6800 on hardware and actually measured the thing instead of just trusting scans of old magazines and Wikipedia pages. Doc TB's <a href="https://x86.fr/investigating-the-halt-and-catch-fire-instruction-on-motorola-6800/" target="_blank" rel="noopener noreferrer nofollow">lab write-up</a> notes an interesting detail: after the opcode is fetched, there is a delay on the order of tens of milliseconds before the address lines settle into the famous fast counting pattern, and there are other undocumented opcodes that look like slower or glitchier versions of the same idea.</p>
<h2 id="beyondmotorola">Beyond Motorola</h2>
<p>Motorola wasn't the only modern processor with this issue: illegal 6502 opcodes that lock the CPU, the Pentium <a href="https://en.wikipedia.org/wiki/Pentium_F00F_bug" target="_blank" rel="noopener noreferrer nofollow">F00F bug</a> (if you remember that era), pairs of instructions on some architectures that wait forever for an interrupt that cannot arrive, and modern x86 fuzzing talks where people still turn up invalid states in huge processors.</p>
<p>Basically, with fuzzing they're trying to set random or unexpected data to the processor to help identify vulnerabilities or bugs in the processor. Unsurpisingly, it's a pretty effective strategy, and not just for processors, but for all kinds of software as well.</p>
<h2 id="haltandendpost">Halt and end post</h2>
<p>This was a fun bit of history to research - and there turned out to be much more to it than I expected, even regarding the "catch fire" part. As a lot of software moves up the stack, it's easy to lose sight of the hardware from our 10,000 foot view. In the end, it's just a bunch of silicon wired together in a way that can sometimes go wrong.</p>
<p>All I know is that this phrase is too good to not use - expect a future project (or company) to use the "HCF" acronym.</p>
<hr>
<h2 id="sourcesandmoreinfo">Sources and more info</h2>
<p>To keep you busy, here are some links to the sources and more info:</p>
<ul>
<li><a href="https://archive.org/details/byte-magazine-1977-12/page/n47/mode/2up" target="_blank" rel="noopener noreferrer nofollow">Gerry Wheeler, "Undocumented M6800 Instructions," <em>BYTE</em> Dec 1977</a></li>
<li>David J. Agans, <em>Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems</em> (AMA, 2002), p. 77</li>
<li><a href="https://sphere.computer/news/2025-04-04-halt-and-catch-fire.html" target="_blank" rel="noopener noreferrer nofollow">Ben Z, "Sphere News: Halt and Catch Fire!"</a></li>
<li><a href="https://retrocomputing.stackexchange.com/questions/15289/behavior-of-lesser-known-illegal-m6800-opcodes" target="_blank" rel="noopener noreferrer nofollow">RetroComputing SE #15289</a></li>
<li><a href="https://x86.fr/investigating-the-halt-and-catch-fire-instruction-on-motorola-6800/" target="_blank" rel="noopener noreferrer nofollow">Doc TB, "Investigating the HCF instruction on Motorola 6800"</a></li>
<li><a href="https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)" target="_blank" rel="noopener noreferrer nofollow">Wikipedia: Halt and Catch Fire (computing)</a></li>
</ul>
]]></content:encoded></item></channel></rss>