AI-Generated Code and Open-Source Licences (Ireland)
Steven | TrustYourWebsite · 15 May 2026 · Last updated: May 2026
A Series-A due-diligence solicitor flags two short JavaScript functions in your front-end bundle as substantially similar to a GPL-3.0 file on GitHub. Your developer used Cursor to write the form-validation logic and didn't think about it again. This article walks through whether that exposure is real, who carries it and what to do about it.
<figure className="my-8"> <svg role="img" aria-labelledby="license-chain-title" aria-describedby="license-chain-desc" viewBox="0 0 1200 540" xmlns="http://www.w3.org/2000/svg" style={{ maxWidth: '100%', height: 'auto' }}> <title id="license-chain-title">How AI-suggested code becomes a license exposure on your website.</title> <desc id="license-chain-desc">Five-stage horizontal flow showing how a prompt to a coding assistant turns into a license obligation for the website operator. Stage one is the developer prompt to Cursor, Copilot or Claude. Stage two is the AI suggestion that may reproduce training-data patterns. Stage three is the code landing in the agency repository with no license metadata preserved. Stage four is the bundle served to browser visitors. Stage five is public distribution, where GPL, MIT or Apache obligations are triggered. Beneath the flow two horizontal bars compare server-side code with lower exposure for non-AGPL projects against client-side JavaScript with full distribution exposure to end users. A right-side annotation references the January 2024 ruling in Doe v. GitHub that dismissed certain DMCA section 1202(b) claims for near-identical output and allowed open-source license breach claims to proceed.</desc> <rect x="0" y="0" width="1200" height="540" fill="#FFFFFF"/> <text x="600" y="35" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="20" fontWeight="600" fill="#1A1A1A">From prompt to public distribution</text> <rect x="40" y="70" width="190" height="100" rx="10" fill="#525252"/> <text x="135" y="105" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">Developer</text> <text x="135" y="125" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">prompt</text> <text x="135" y="148" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">Cursor / Copilot</text> <text x="135" y="162" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">/ Claude</text> <rect x="250" y="70" width="190" height="100" rx="10" fill="#525252"/> <text x="345" y="105" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">AI suggestion</text> <text x="345" y="135" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">may reproduce</text> <text x="345" y="150" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">training-data</text> <text x="345" y="165" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">patterns</text> <rect x="460" y="70" width="190" height="100" rx="10" fill="#D97706"/> <text x="555" y="105" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">Agency repo</text> <text x="555" y="135" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">no license</text> <text x="555" y="150" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">metadata</text> <text x="555" y="165" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">preserved</text> <rect x="670" y="70" width="190" height="100" rx="10" fill="#D97706"/> <text x="765" y="105" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">Bundled into</text> <text x="765" y="125" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">your site</text> <text x="765" y="150" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">served to browser</text> <text x="765" y="165" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">visitors</text> <rect x="880" y="70" width="220" height="100" rx="10" fill="#B91C1C"/> <text x="990" y="105" textAnchor="middle" fontFamily="Instrument Serif, serif" fontSize="15" fontWeight="600" fill="#FFFFFF">Public distribution</text> <text x="990" y="135" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">GPL / MIT / Apache</text> <text x="990" y="150" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">obligations</text> <text x="990" y="165" textAnchor="middle" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#FFFFFF">triggered here</text> <path d="M 230 120 L 248 120" stroke="#1A1A1A" strokeWidth="2"/> <polygon points="252,120 244,115 244,125" fill="#1A1A1A"/> <path d="M 440 120 L 458 120" stroke="#1A1A1A" strokeWidth="2"/> <polygon points="462,120 454,115 454,125" fill="#1A1A1A"/> <path d="M 650 120 L 668 120" stroke="#1A1A1A" strokeWidth="2"/> <polygon points="672,120 664,115 664,125" fill="#1A1A1A"/> <path d="M 860 120 L 878 120" stroke="#1A1A1A" strokeWidth="2"/> <polygon points="882,120 874,115 874,125" fill="#1A1A1A"/> <text x="80" y="240" fontFamily="Instrument Serif, serif" fontSize="16" fontWeight="600" fill="#1A1A1A">Exposure by code location</text> <rect x="80" y="260" width="500" height="40" rx="6" fill="#1B7D56" fillOpacity="0.5"/> <text x="95" y="285" fontFamily="DM Sans, sans-serif" fontSize="13" fontWeight="500" fill="#1A1A1A">Server-side code: lower exposure (AGPL excepted)</text> <rect x="80" y="310" width="900" height="40" rx="6" fill="#B91C1C"/> <text x="95" y="335" fontFamily="DM Sans, sans-serif" fontSize="13" fontWeight="500" fill="#FFFFFF">Client-side JavaScript: full distribution to end users</text> <rect x="700" y="220" width="460" height="120" rx="8" fill="#F5F5F5" stroke="#525252" strokeWidth="1"/> <text x="720" y="245" fontFamily="DM Sans, sans-serif" fontSize="12" fontWeight="600" fill="#1A1A1A">Doe v. GitHub, January 2024</text> <text x="720" y="265" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#1A1A1A">DMCA section 1202(b) claims for "near-identical,</text> <text x="720" y="280" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#1A1A1A">not verbatim" output dismissed with prejudice.</text> <text x="720" y="300" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#1A1A1A">Open-source licence-breach claims allowed</text> <text x="720" y="315" fontFamily="DM Sans, sans-serif" fontSize="11" fill="#1A1A1A">to proceed. Case ongoing.</text> <rect x="60" y="400" width="1080" height="110" rx="10" fill="#F0FDF4" stroke="#1B7D56" strokeWidth="1.5"/> <text x="80" y="430" fontFamily="Instrument Serif, serif" fontSize="16" fontWeight="600" fill="#145E40">Where the licence weight lives</text> <text x="80" y="455" fontFamily="DM Sans, sans-serif" fontSize="13" fill="#1A1A1A">The maintainer who notices their code reaches out to the entity distributing it. That is</text> <text x="80" y="473" fontFamily="DM Sans, sans-serif" fontSize="13" fill="#1A1A1A">the site operator, not the developer and not the AI vendor. The developer's contract with</text> <text x="80" y="491" fontFamily="DM Sans, sans-serif" fontSize="13" fill="#1A1A1A">the AI vendor stays in the background. The operator handles the public-facing question.</text> </svg> <figcaption>The legal weight sits at the last stage. The further down the chain you sit, the more you carry.</figcaption> </figure>What the AI actually did
Coding assistants like GitHub Copilot, Cursor, Claude and Cody were trained on huge volumes of public source code, including repositories under GPL, MIT, Apache and BSD licences. The training process did not preserve attribution metadata, and the models learned patterns rather than entire files. When a developer prompts the assistant, the model produces an output that is sometimes a novel construction and sometimes a near-identical reproduction of a specific training-data file. The assistant does not warn the developer which is which, and it does not emit a SPDX header or a copyright notice.
That is the technical fact at the bottom of the legal question. The model is not licensed to redistribute training-data code, and the developer is not warned when the output is structurally close to a specific source.
Who is exposed
The site operator distributes the code that ships to visitors. A browser loading your homepage receives the JavaScript bundle. Under GPL and similar copyleft licences, that is distribution to the end user. The operator is the entity making it available, regardless of whether the operator wrote the line of code or the agency did or an AI suggested it.
This is the same liability chain that applies to web-designer-introduced copyright issues. The pre-AI version of the problem is a designer who dropped an unlicensed Getty photo into the carousel. The post-AI version is a developer who accepted a Copilot suggestion that reproduced a GPL source file. The structure is the same. The public-facing party is the operator. The internal cost allocation between operator and agency is contract.
Sitting next to this is the broader question of who pays when AI-built sites break compliance. GDPR enforcement by the Data Protection Commission and EAA enforcement under the Irish transposing regulations flow to the operator on the same principle. Copyright on AI-generated code is the copyright corner of that same map.
What the courts have actually said
The leading case is Doe v. GitHub, Inc., filed November 2022 in the Northern District of California. Anonymous developer plaintiffs sued GitHub, Microsoft and OpenAI over Copilot's training on public open-source code. The procedural posture moves, and the table below is a snapshot as of May 2026. Re-verify before relying on it.
<!-- LAST VERIFIED: 2026-05-15 --> <figure className="my-8"> <table> <caption>Doe v. GitHub claim-by-claim status, May 2026.</caption> <thead> <tr> <th scope="col">Claim</th> <th scope="col">Status as of May 2026</th> <th scope="col">What it means for your site</th> </tr> </thead> <tbody> <tr> <th scope="row">DMCA § 1202(b) on removing copyright management information</th> <td>Dismissed with prejudice, January 2024, for "near-identical" outputs</td> <td>Plaintiffs would need verbatim reproduction to revive. Risk for SMBs: low on this specific theory.</td> </tr> <tr> <th scope="row">Breach of open-source licence terms (MIT, GPL, Apache and others)</th> <td>Allowed to proceed</td> <td>Open-source licences are treated as enforceable contracts. Risk for SMBs: moderate where client-side code distributes the output.</td> </tr> <tr> <th scope="row">Tortious interference and unfair competition</th> <td>Mixed dispositions, some claims survived</td> <td>Not directly SMB-relevant. The dispute is between the plaintiffs and the AI provider.</td> </tr> <tr> <th scope="row">Unjust enrichment</th> <td>Dismissed</td> <td>Not SMB-relevant.</td> </tr> </tbody> </table> <figcaption>A live procedural posture. Re-verify before relying on it.</figcaption> </figure>The headline takeaway is narrow. The court has not yet ruled on the central substantive question of whether AI-generated output substantially similar to training code violates the original licence. What it has done is sorted the claim theories. The technical "removal of copyright management information" route under DMCA § 1202(b) is closed where the output is "near-identical with semantically insignificant variations." The contract route, treating an open-source licence as a binding agreement that the AI provider's use violated, is still live. Procedural updates appear on the BakerHostetler tracker and on the plaintiffs' counsel's case page. The plaintiffs' page is one side's framing and should be treated as such.
GPL distribution and your website
The legal question turns on a technical one. What counts as distributing the code?
GPL-style copyleft licences attach attribution and source-availability duties to anyone who distributes a covered work. Distribution to an end user is the trigger. For a website, this maps to two cases.
Client-side JavaScript that ships to the visitor's browser is distribution. Every page load delivers the bundle to a third party, which is the GPL distribution case. If the bundle contains code that is substantially similar to a GPL-licensed file, attribution and source-availability duties apply.
Server-side code that never leaves your server is generally not GPL distribution. The exception is AGPL, where Section 13 treats network use as distribution. Most SMB sites do not run AGPL-licensed backend code, so the practical exposure is concentrated in the client-side bundle: form validation, animations, modals, helper utilities, the kind of small functions a developer asks an AI to write.
This is why the AI-code question matters more for the front end than for the back end of your site. A WordPress plugin that uses Copilot-suggested PHP on the server runs at lower exposure for non-AGPL code than a React component the assistant wrote that ships to every visitor.
How realistic is the risk
Honest probability hierarchy, in order from most to least likely.
The first realistic scenario is an investor or acquirer running due diligence on your codebase before a funding round or an exit. Their lawyers run a licence scanner like FOSSA, ScanCode or licensee. If the scanner flags GPL-licensed code in a proprietary product, the deal-team asks questions. The outcome is usually a remediation budget and a delay, not a killed deal. This is the most common way SMBs find out they have a problem.
The second is an open-source maintainer noticing their code in your public bundle. Larger projects have community members who watch for unattributed reuse. The first contact is a polite email asking for attribution. Escalation looks like a DMCA takedown sent to your host, which interrupts service until you respond. Lawsuits at this level are rare for SMBs because the cost of bringing one outweighs the recovery against a small business.
The third is enforcement by a copyleft-licence steward organisation such as the Software Freedom Conservancy. These groups do bring enforcement actions, but their pattern is to engage in long correspondence first and to target hardware vendors or larger software companies. The threshold for an SMB website is high.
In practice, the realistic week-to-week risk for a small business site is zero. The risk concentrates around three moments: a funding round, an acquisition, or a maintainer searching the internet for their distinctive function. None of these is likely in a given month, but all are predictable and avoidable.
Practical mitigation if you or your developer use AI tools
Five things to do. None of these is a legal defence and none should be sold to you as one. They are engineering hygiene that reduces the chance the problem ever surfaces.
First, turn on the duplication filter in Copilot, Cursor or any other coding assistant that offers one. The filter blocks suggestions that match training-data code above a similarity threshold. It does not eliminate near-identical output, but it does reduce the worst case. Confirm the setting is on in the developer's actual editor configuration, not just on the team account.
Second, run a licence scanner before deployment. Free tools include licensee, scancode-toolkit and ort (the OSS Review Toolkit). Commercial options include FOSSA, Snyk Licence and Black Duck. The scanner reads your package manifests and your source tree and flags licences that conflict with your distribution model. Running this once on the production bundle is more useful than running it never.
Third, if your developer is on paid Copilot Business or Enterprise, GitHub offers an IP indemnification commitment against third-party claims arising from Copilot output, conditional on the duplication filter being enabled. This is a meaningful contractual backstop, but it is conditional on the filter setting, limited to the named plans and verifiable only against the current terms before relying on it. Free Copilot, Cursor, Claude and Cody do not, as of May 2026, offer equivalent commitments.
Fourth, update your agency contract. Add a clause that the agency will not use AI-assisted code that incorporates GPL or AGPL output without explicit written notice to you, and that the agency warrants the delivered site does not infringe third-party licences. This does not protect you from the maintainer who notices. It does give you a route to push the cost back to the agency if a claim arises.
Fifth, keep a software bill of materials for your client-side bundle. Tools like cyclonedx-bom or the SBOM exports built into modern bundlers list every dependency and its licence. If a question arises in a year, having an SBOM from the release in question saves a week of work.
Our free compliance scan covers GDPR, cookies, accessibility and image rights on the live site. It does not check open-source licence compliance, which is a separate developer-tooling job. Treat the two as parallel tracks on the same site.
What changes on 9 December 2026
Directive (EU) 2024/2853, the new Product Liability Directive, treats software including AI systems as products from 9 December 2026. Ireland must transpose by that date. Article 4 brings AI tools into scope. Article 2(2) excludes open-source software developed outside a commercial activity, so the public open-source maintainer is not the defendant in a PLD claim. The commercial AI vendor is.
The relevance to AI-generated code is narrow. An Irish small business harmed by a defective AI tool, for example where the AI emits code with a security flaw that leads to a data breach with downstream harm to a natural person, may have a new no-fault claim path against the AI vendor under the directive. The claim is for damage to natural persons, and it applies only to products placed on the market after 9 December 2026. The PLD is not a route for the operator to recover a Data Protection Commission fine and it does not retroactively reach pre-existing tools. The Product Liability Directive in depth covers the scope and exclusions.
What this is not
This article is about open-source licence exposure when an AI writes code on your site. Three adjacent topics share words with this one.
Chatbot disclosure and AI-generated marketing copy labelling sit under Article 50 of the AI Act and AI-generated content, which is a separate regime from source-code copyright. The image side, where AI-generated illustrations or photographs may infringe, lives in AI-generated images on your site. The cookie-banner and accessibility version of the same liability chain is the broader GDPR and accessibility question. For the pre-AI image-letter version, see the Getty Images letter guide.
Common Questions
Does Copilot's duplication filter eliminate the risk?
No. The filter reduces the chance of verbatim reproduction of training-data code, which is the worst case. It does not address near-identical output that still resembles a specific open-source file. Treat the filter as risk reduction, not as a legal shield.
Am I liable if my freelancer used Cursor without telling me?
The site operator is the party distributing the code to visitors. An open-source maintainer who notices their code in your bundle writes to the domain owner. Your freelancer may owe you a fix under contract, but the public-facing exposure sits with you.
Does this apply to server-side code or just client-side?
Mostly client-side. Code that ships to the browser is distribution under GPL and triggers attribution and source-availability duties. Server-side code that never leaves your server is generally not GPL-distribution, except for AGPL, where network use counts as distribution under section 13.
Is there any AI coding tool that is safer than others?
Paid Copilot Business and Enterprise plans include an IP indemnity from GitHub when the duplication filter is enabled. No equivalent commitment is standard on Cursor, Claude, Cody or free Copilot tiers as of May 2026. Verify current terms before relying on any vendor promise.
Related reading
Cluster pieces that pair with this one:
- The full liability picture for AI-built sites in Ireland. The hub article on GDPR, EAA and cookie-law liability for AI-assisted sites.
- AI-generated images on your website. The image side of the AI-output copyright question.
- Product Liability Directive 2024/2853. Strict-liability claims for damage from defective AI tools, applicable from 9 December 2026.
- Web designer copyright liability. The pre-AI parent article on agency-client copyright chains.
This article is technical analysis, not legal advice. The author is not your solicitor. For a binding view on a live licence question, talk to one.
Website Guides
Getty Images Letter in Ireland: a Response Guide for Small Businesses
Received a Getty Images or PicRights letter for an image on your Irish website? What CRRA 2000 says, what Irish courts award and how to respond without overpaying.
AI-Generated Images on Irish Business Websites (2026)
Article 50(4) of the AI Act applies 2 Aug 2026. The four risk layers an Irish SMB should check before publishing AI-generated images on a website.
Safe Free Image Sources for Your Business Website
Find free images for your business website that won't get you a copyright claim. Unsplash, Pexels, Pixabay and more, with license details.