Files

1110 lines
46 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- START: two lines up starts content from: inc/top.default.html -->
<!-- END: this line ends content from: inc/top.default.html -->
<!-- START: this line starts content from: inc/head.default.html -->
<head>
<link rel="stylesheet" href="../ioccc.css">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>The International Obfuscated C Code Contest</title>
<link rel="icon" type="image/x-icon" href="../favicon.ico">
<meta name="description" content="IOCCC Rules">
<meta name="keywords" content="IOCCC, rules, Rules">
</head>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- END: this line ends content from: inc/head.default.html -->
<!-- -->
<!-- This web page was formed via the tool: bin/gen-top-html.sh -->
<!-- The content of main section of this web page came from: next/rules.md -->
<!-- -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- !!! Do not modify this web page, instead modify the file: next/rules.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: next/rules.md !!! -->
<!-- !!! Do not modify this web page, instead modify the file: next/rules.md !!! -->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
<!-- START: this line starts content from: inc/body.default.html -->
<body>
<!-- END: this line ends content from: inc/body.default.html -->
<!-- START: this line starts content from: inc/topbar.default.html -->
<div class="theader">
<nav class="topbar">
<div class="container">
<div class="logo">
<a href="../index.html" class="logo-link">
IOCCC
</a>
</div>
<div class="topbar-items">
<div class="item">
<span class="item-header">
Entries
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../years.html" class="sub-item-link">
Winning entries
</a>
</div>
<div class="outfit-font">
<a href="../authors.html" class="sub-item-link">
Winning authors
</a>
</div>
<div class="outfit-font">
<a href="../location.html" class="sub-item-link">
Location of authors
</a>
</div>
<div class="outfit-font">
<a href="../bugs.html" class="sub-item-link">
Bugs and (mis)features
</a>
</div>
<div class="outfit-font">
<a href="../faq.html#fix_an_entry" class="sub-item-link">
Fixing entries
</a>
</div>
<div class="outfit-font">
<a href="../faq.html#fix_author" class="sub-item-link">
Updating author info
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
Status
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../news.html" class="sub-item-link">
News
</a>
</div>
<div class="outfit-font">
<a href="../status.html" class="sub-item-link">
Contest status
</a>
</div>
<div class="outfit-font">
<a href="../next/rules.html" class="sub-item-link">
IOCCC rules
</a>
</div>
<div class="outfit-font">
<a href="../next/guidelines.html" class="sub-item-link">
IOCCC guidelines
</a>
</div>
<div class="outfit-font">
<a href="../markdown.html" class="sub-item-link">
Markdown guidelines
</a>
</div>
<div class="outfit-font">
<a href="../SECURITY.html" class="sub-item-link">
Security policy
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
FAQ
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../faq.html" class="sub-item-link">
Frequently asked questions
</a>
</div>
<div class="outfit-font">
<a href="../quick-start.html#enter" class="sub-item-link">
Enter the IOCCC
</a>
</div>
<div class="outfit-font">
<a href="../faq.html#compiling" class="sub-item-link">
Compiling entries
</a>
</div>
<div class="outfit-font">
<a href="../faq.html#running_entries" class="sub-item-link">
Running entries
</a>
</div>
<div class="outfit-font">
<a href="../faq.html#help" class="sub-item-link">
How to help
</a>
</div>
</div>
</div>
<div class="item">
<span class="item-header">
About
</span>
<div class="sub-item">
<div class="outfit-font">
<a href="../index.html" class="sub-item-link">
Home page
</a>
</div>
<div class="outfit-font">
<a href="../social.html" class="sub-item-link">
IOCCC social media
</a>
</div>
<div class="outfit-font">
<a href="../about.html" class="sub-item-link">
About the IOCCC
</a>
</div>
<div class="outfit-font">
<a href="../judges.html" class="sub-item-link">
The judges
</a>
</div>
<div class="outfit-font">
<a href="../thanks-for-help.html" class="sub-item-link">
Thanks for the help
</a>
</div>
<div class="outfit-font">
<a href="../contact.html" class="sub-item-link">
Contact us
</a>
</div>
</div>
</div>
</div>
</div>
</nav>
<div class="header-mobile-menu">
<noscript>
<a href="../nojs-menu.html" class="topbar-js-label">
Please Enable JavaScript
</a>
</noscript>
<button id="header-open-menu-button" class="topbar-mobile-menu">
<img
src="../png/hamburger-icon-open.png"
alt="hamburger style menu icon - open state"
width=48
height=48>
</button>
<button id="header-close-menu-button" class="hide-content">
<img
src="../png/hamburger-icon-closed.png"
alt="hamburger style menu icon - closed state"
width=48
height=48>
</button>
<div id="mobile-menu-panel" class="hide-content">
<div class="mobile-menu-container">
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
Entries
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../years.html">
Winning entries
</a>
<a class="mobile-submenu-item" href="../authors.html">
Winning authors
</a>
<a class="mobile-submenu-item" href="../location.html">
Location of authors
</a>
<a class="mobile-submenu-item" href="../bugs.html">
Bugs and (mis)features
</a>
<a class="mobile-submenu-item" href="../faq.html#fix_an_entry">
Fixing entries
</a>
<a class="mobile-submenu-item" href="../faq.html#fix_author">
Updating author info
</a>
<a class="mobile-submenu-item" href="../thanks-for-help.html">
Thanks for the help
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
Status
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../news.html">
News
</a>
<a class="mobile-submenu-item" href="../status.html">
Contest status
</a>
<a class="mobile-submenu-item" href="../next/rules.html">
IOCCC rules
</a>
<a class="mobile-submenu-item" href="../next/guidelines.html">
IOCCC guidelines
</a>
<a class="mobile-submenu-item" href="../markdown.html">
Markdown guidelines
</a>
<a class="mobile-submenu-item" href="../SECURITY.html">
Security policy
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
FAQ
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../faq.html">
Frequently asked questions
</a>
<a class="mobile-submenu-item" href="../quick-start.html#enter">
Enter the IOCCC
</a>
<a class="mobile-submenu-item" href="../faq.html#compiling">
Compiling entries
</a>
<a class="mobile-submenu-item" href="../faq.html#running_entries">
Running entries
</a>
<a class="mobile-submenu-item" href="../faq.html#help">
How to help
</a>
</div>
</div>
<div class="mobile-menu-wrapper">
<div class="mobile-menu-item">
About
</div>
<div class="mobile-submenu-wrapper">
<a class="mobile-submenu-item" href="../index.html">
Home page
</a>
<a class="mobile-submenu-item" href="../social.html">
IOCCC social media
</a>
<a class="mobile-submenu-item" href="../about.html">
About the IOCCC
</a>
<a class="mobile-submenu-item" href="../judges.html">
The judges
</a>
<a class="mobile-submenu-item" href="../contact.html">
Contact us
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var headerOpenMenuButton = document.getElementById("header-open-menu-button");
var headerCloseMenuButton = document.getElementById("header-close-menu-button");
var mobileMenuPanel = document.getElementById("mobile-menu-panel");
headerOpenMenuButton.addEventListener("click", () => {
headerOpenMenuButton.classList.remove("topbar-mobile-menu");
headerOpenMenuButton.classList.add("hide-content");
headerCloseMenuButton.classList.remove("hide-content");
headerCloseMenuButton.classList.add("topbar-mobile-menu");
mobileMenuPanel.classList.remove("hide-content");
mobileMenuPanel.classList.add("topbar-mobile-panel");
});
headerCloseMenuButton.addEventListener("click", () => {
headerCloseMenuButton.classList.remove("topbar-mobile-menu");
headerCloseMenuButton.classList.add("hide-content");
mobileMenuPanel.classList.add("hide-content");
mobileMenuPanel.classList.remove("topbar-mobile-panel");
headerOpenMenuButton.classList.add("topbar-mobile-menu");
headerOpenMenuButton.classList.remove("hide-content");
});
</script>
<!-- END: this line ends content from: inc/topbar.default.html -->
<!-- START: this line starts content from: inc/header.default.html -->
<div class="header">
<a href="../2011/zucker/index.html">
<img src="../png/ioccc.png"
alt="IOCCC image by Matt Zucker"
width=300
height=110>
</a>
<h1>The International Obfuscated C Code Contest</h1>
<h2>IOCCC Rules</h2>
</div>
<!-- END: this line ends content from: inc/header.default.html -->
<!-- START: this line starts content from: inc/navbar.empty.html -->
<div class="navbar">
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2Fnext%2Frules.html">&#x2713;</a>
</div>
<!-- END: this line ends content from: inc/navbar.empty.html -->
<!-- START: this line starts content from: inc/before-content.default.html -->
<div class="content" id="content">
<!-- END: this line ends content from: inc/before-content.default.html -->
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<!-- BEFORE: 1st line of markdown file: next/rules.md -->
<!-- START: this line starts content from: inc/rules.open.hdr -->
<h1 id="official-ioccc-rules">Official IOCCC rules</h1>
<p>These rules are <strong>OFFICIAL</strong>.</p>
<p>Unless some significant problem turns up (such as a need to delay in
when the IOCCC will close, or some major bug is discovered) they will
remain <strong>OFFICIAL</strong> for this IOCCC.</p>
<p>See our
FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>”
as well as our
FAQ on “<a href="../faq.html#question">about asking questions</a>”
about these rules. You might also find the FAQ in general useful, especially the
FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p>
<p><strong>SUGGESTION</strong>: Watch both the <a href="../news.html">IOCCC news</a> and the <a href="https://fosstodon.org/@ioccc">IOCCC
Mastodon</a> feed for the latest news about
any <em>mentions</em> changes.</p>
<p><strong>HINT to mastodon users</strong>: You may wish to refresh the <a href="https://fosstodon.org/@ioccc"><span class="citation" data-cites="IOCCC">@IOCCC</span> mastodon
feed</a> page and/or mastodon app from time
to time to view IOCCC mastodon updates.</p>
<h1 id="the-ioccc-open-for-submissions">The IOCCC open for submissions</h1>
<p>See “<a href="../quick-start.html#enter">FAQ - How may I enter the IOCCC</a>”
for information on how to register for the IOCCC, how to create a proper
bzip2 compressed tarball of your submission, and how to upload your
bzip2 compressed tarball to the IOCCC submit server.</p>
<!-- END: the next line ends content from: inc/rules.open.hdr -->
<!-- This is the last line modified by the tool: bin/gen-status.sh -->
<h1 id="th-international-obfuscated-c-code-contest-official-rules">29th International Obfuscated C Code Contest Official Rules</h1>
<p>Copyright (c) 2025 Leonid A. Broukhis and Landon Curt Noll.</p>
<p>All Rights Reserved. Permission for personal, education or non-profit use is
granted provided this copyright and notice are included in its entirety
and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p>
<h2 id="rules-version">Rules Version</h2>
<p>These IOCCC Rules are version <strong>29.15 2025-12-02</strong>.</p>
<p class="leftbar">
The <span style="font-size:28px;"><b>|</b></span> symbol
indicates a <strong>change</strong> from the previous IOCCC.
</p>
<p class="leftbar">
Because the <strong>IOCCC29</strong> rules was a substantial rewrite, only
<strong>important changes</strong> from <strong>IOCCC28</strong> have been marked.
</p>
<p>Reminder: be SURE to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="rule0">
<h2 id="rule-0---dates">Rule 0 - Dates</h2>
</div>
<p class="leftbar">
This IOCCC runs from <code>2025-12-03 20:25:12.045045 UTC</code> to <code>2026-03-13 17:19:23.293137 UTC</code>.
</p>
<p class="leftbar">
This contest will enter the <a href="../faq.html#pending">pending state</a> on
<code>2025-12-03 20:25:12.045045 UTC</code>, allowing people to <a href="register.html">register for the
IOCCC</a>.
</p>
<p class="leftbar">
This contest will enter the <a href="../faq.html#open">open state</a> on
<code>2025-12-15 18:21:24.273033 UTC</code>, allowing people to <a href="submit.html">upload
submissions</a>.
</p>
<p class="leftbar">
This contest will enter the <a href="../faq.html#judging">judging state</a> on
<code>2026-03-13 17:19:23.293137 UTC</code>, when people will no longer be allowed
to upload submissions.
</p>
<p>The above <strong>dates and times may change <em>AT ANY TIME</em></strong> until the
<a href="../status.html">contest status</a> is <strong>open</strong>.</p>
<p class="leftbar">
The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.
</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to
know</a>.</p>
<p>See
FAQ on “<a href="../faq.html#feedback">How can I comment or make a suggestion on IOCCC rules,
guidelines and tools?</a>”.</p>
<div id="rule1">
<div id="rule1-c">
<h2 id="rule-1---c-program">Rule 1 - C program</h2>
</div>
</div>
<p class="leftbar">
Your submission <strong>MUST</strong> be a C program.
</p>
<p>See the <a href="guidelines.html#guideline1-c">Guidelines for Rule 1 - C
program</a>.</p>
<div id="rule2">
<div id="rule2-size-restrictions">
<div id="rule2-size">
<h2 id="rule-2---size-restrictions">Rule 2 - Size restrictions</h2>
</div>
</div>
</div>
<p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong> <a href="rules.html#rule2a">Rule 2a
(Gross Size)</a> and <a href="rules.html#rule2b">Rule 2b (Net
Size)</a>.</p>
<p>During development this can be checked using <code>iocccsize(1)</code>:</p>
<pre><code> iocccsize prog.c</code></pre>
<p>See the <a href="guidelines.html#guideline2-size">Guidelines for Rule 2 - Size
restrictions</a>.</p>
<div id="rule2a">
<div id="rule2a-gross-size">
<h3 id="rule-2a---gross-size">Rule 2a - Gross Size</h3>
</div>
</div>
<p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
exceed <strong>4993</strong> bytes.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to
know</a>.</p>
<div id="rule2b">
<div id="rule2b-net-size">
<h3 id="rule-2b---net-size">Rule 2b - Net Size</h3>
</div>
</div>
<p>Check your source code using the latest official IOCCC size tool,
<code>iocccsize(1)</code>. The value printed <strong>MUST NOT</strong> exceed <strong>2503</strong>.</p>
<p>See <a href="#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule3">
<div id="rule3-register">
<h2 id="rule-3---register-for-the-ioccc">Rule 3 - Register for the IOCCC</h2>
</div>
</div>
<p>You <strong>MUST</strong> register, using a valid email address, in order to submit
to the IOCCC. You may register while the contest is <strong>pending</strong> or
<strong>open</strong>.</p>
<p>A few days after registering, you’ll receive your UUID username and
temporary password, which you <strong>MUST</strong> change within 14 days.</p>
<p>See <a href="register.html">How to register for the IOCCC</a>.</p>
<p>See <a href="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to
know</a>.</p>
<p>See <a href="guidelines.html#guideline3-register">Guidelines for Rule 3 - Register for the
IOCCC</a>.</p>
<div id="rule4">
<div id="rule4-required-files">
<h2 id="rule-4---required-files">Rule 4 - Required files</h2>
</div>
</div>
<p class="leftbar">
Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>,
<code>prog.c</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>, the latter two
of which are generated by <code>mkiocccentry(1)</code>. See <a href="#rule17-mkiocccentry">Rule 17 - Use
mkiocccentry</a>.
</p>
<p class="leftbar">
At a <strong>minimum</strong> the following requirements apply. Additional
requirements may be imposed by <code>mkiocccentry(1)</code> updates that have yet
to be listed below:
</p>
<ul>
<li><p class="leftbar">
<code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by
<code>mkiocccenty(1)</code> when packing a submission.
</p></li>
<li><p class="leftbar">
Before forming the tarball, <code>mkiocccentry(1)</code> will run <code>chksubmit(1)</code> on your
submission directory and if <strong>ANY</strong> problems are found (with <code>.auth.json</code>,
<code>.info.json</code> or <strong>ANYTHING</strong> else), your tarball will <strong>NOT</strong> be formed.
</p></li>
<li><p class="leftbar">
The <code>Makefile</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>
<strong>MUST</strong> have a file size <strong>greater than 0</strong> and <strong>MUST</strong> have content. Note
that <code>mkiocccentry(1)</code> will check for file <strong>size</strong> but will <strong>NOT</strong> check for
content. On the other hand <code>chksubmit(1)</code> will check that the <code>.auth.json</code> and
<code>.info.json</code> are both valid JSON and are valid according to the IOCCC
requirements.
</p></li>
<li><p class="leftbar">
Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the
<code>Makefile</code> compiles your code, the executable (if applicable) <strong>MUST</strong>
be called <code>prog</code>. The <code>Makefile</code> may compile your source code into
other filenames as well, if you want.
</p></li>
<li><p class="leftbar">
As <code>prog</code>, <code>prog.alt</code>, <code>prog.alt.o</code>, <code>prog.o</code> may be created by your
<code>Makefile</code>, your submission <strong>MUST NOT</strong> include those files in your
<strong>top</strong> directory.
</p></li>
<li><p class="leftbar">
Your submission may <strong>NOT</strong> have any file that starts with <code>COPYING</code>,
<code>COPYRIGHT</code>, or <code>LICENSE</code> as those files are reserved by IOCCC.
</p></li>
<li><p class="leftbar">
Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory:
<code>prog.orig.c</code>, <code>README.md</code> or <code>index.html</code> as those files are reserved
by the IOCCC.
</p></li>
<li><p class="leftbar">
Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory any file that matches
a file glob pattern form <code>[0-9][0-9][0-9][0-9]_*.tar.bz2</code> as those files are
reserved by IOCCC.
</p></li>
<li><p class="leftbar">
Your submission may <strong>ONLY</strong> contain <strong>regular</strong> files and directories. Other
file types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.
</p></li>
<li><p class="leftbar">
<strong>All</strong> directories <strong>MUST</strong> have permission mode of <code>0755</code>. All
files <strong>MUST</strong> have the file mode of <code>0444</code>, <strong>EXCEPT</strong> for files that
end in <code>.sh</code> which must have a mode of <code>0555</code>.
</p></li>
<li><p class="leftbar">
All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.
</p></li>
<li><p class="leftbar">
All filenames are treated as case insensitive. For example,
<code>REMARKS.MD</code>, and <code>Remarks.md</code>, and <code>remarks.md</code> are considered by
<code>mkiocccenty(1)</code> to be the <strong>SAME</strong> file. When preparing a submission
on a case sensitive filesystem, ensure that the submission will work on
a case insensitive filesystem.
</p></li>
</ul>
<p class="leftbar">
<strong>NOTE</strong>: by ‘top directory’ we mean the directory with <code>prog.c</code>,
<code>Makefile</code>, <code>remarks.md</code> and the <code>mkiocccentry(1)</code> generated files
<code>.auth.json</code> and <code>.info.json</code> and <strong>NOT</strong> the <code>topdir</code> arg to
<code>mkiocccentry(1)</code>.
</p>
<p class="leftbar">
<strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has
prohibited files.
</p>
<p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the
<a href="guidelines.html">Guidelines</a>.</p>
<p>See <a href="../markdown.html">IOCCC markdown guidelines</a>.</p>
<p>See <a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#file_perms">What permissions may my files be and what if I need different
permissions?</a>”.</p>
<p>See the
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission
Makefile?</a>”.</p>
<p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry
toolkit</a>.</p>
<div id="rule5">
<div id="rule5-modifying-files">
<h2 id="rule-5---do-not-modify-submitted-files-filenames-or-parent-directories">Rule 5 - Do NOT modify submitted files, filenames or parent directories</h2>
</div>
</div>
<p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of
your original submission, such as <code>prog.c</code>, <code>Makefile</code>, or <strong>ANY</strong>
other supplied files. To modify files, your program can make a copy or
you can use the <code>Makefile</code> to setup working copies. Any working copies
<strong>MUST</strong> be cleaned up by the <code>Makefile</code> <code>clobber</code> target, so as to
restore the directory to its original state.</p>
<p>With the exception of the <code>/tmp</code> and the <code>/var/tmp</code> directories,
assuming the directory name or filename does <strong>NOT</strong> start with a <code>.</code>
(dot), your submission <strong>MUST NOT</strong> create or modify directories and
files <strong>ABOVE</strong> the current directory.</p>
<p>The <code>Makefile</code> <code>clobber</code> target <strong>MUST</strong> restore your submission to its
original form, including the removal of any created files and
directories.</p>
<p class="leftbar">
Your code should be able to run under a <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
environment</a>.
</p>
<div id="rule6">
<div id="rule6-free-rule">
<h2 id="rule-6---free-rule">Rule 6 - Free Rule</h2>
</div>
</div>
<p>I am <strong>NOT</strong> a Rule, I am a <code>free(void *human);</code> ‼️</p>
<pre><code> while (!(ioccc(rule(you(are(number(6)))))) {
ha(); ha(); ha();
}</code></pre>
<p>See <a href="rules.html#rule19-prime">Rule 19 - Prime</a>.</p>
<div id="rule7">
<div id="rule7-original-work">
<h2 id="rule-7---original-work">Rule 7 - Original Work</h2>
</div>
</div>
<p class="leftbar">
You, the author(s), <strong>MUST</strong> own the contents of your submission, <strong>OR</strong>, IF you
do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have permission from the original
owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by others, you
<strong>MUST</strong> detail that ownership, i.e., who owns what, and document in your
<code>remarks.md</code> the permission you obtained from them.
</p>
<p class="leftbar">
You are permitted to use tools to write your code.
</p>
<p>See <a href="rules.html#rule16-anonymous-judging">Rule 16 - Anonymous Judging</a>,
and
<a href="guidelines.html#guideline7-original">Guidelines for Rule 7 - Original
Work</a>.</p>
<div id="rule8">
<div id="rule8-submitting-requirements">
<h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2>
</div>
</div>
<p>The submit server will accept submissions <strong>ONLY</strong> from those who have
registered and <strong>ONLY</strong> while the contest is open and <strong>ONLY</strong> after
you have changed your initial password.</p>
<p>The submit server places a total size limit of <strong>3999971</strong> bytes
<strong>PER</strong> submission.</p>
<p class="leftbar">
Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>.
</p>
<p class="leftbar">
Each submission slot should be annotated by the server as to whether it
was received, processed, malformed, etc. Please take note of any
errors, rectify, and resubmit.
</p>
<p class="leftbar">
In order to avoid potential packaging errors, it is <strong>highly
recommended</strong> to use <code>mkiocccentry(1)</code>, <strong>AND</strong> to check from time to
time the status on the submit server, to see if any tests run by the
server failed to validate your submission.
</p>
<p>See
<a href="rules.html#rule3-register">Rule 3 - Registering for the IOCCC</a>,
<a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>,
and
<a href="rules.html#rule17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See <a href="guidelines.html#guideline8-submitting">Guidelines for Rule 8 - Submitting
requirements</a>.</p>
<div id="rule9">
<div id="rule9-no-interactive">
<h2 id="rule-9---no-interactive-compiling-allowed">Rule 9 - No interactive compiling allowed</h2>
</div>
</div>
<p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong>
permitted. However, see the <a href="guidelines.html#guideline9-no-interactive">guidelines on rule
9</a> as you
<strong>may</strong> suggest alternative compilation steps to do something fun or
cute.</p>
<p>Each entry <strong>MUST</strong> automate the build process using <code>bash</code>, <code>gmake</code>,
<code>gcc</code> and/or <code>clang</code> and other commonly available tools under an <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
environment</a>.</p>
<p><strong>NOTE</strong>: any reference to <code>gmake(1)</code> can be any GNU Make compatible
tool.</p>
<p><strong>NOTE</strong>: it is better to use the <code>${MAKE}</code> variable as then one may
override the <code>make</code> command.</p>
<p><strong>NOTE</strong>: it is better to <strong>NOT</strong> modify <code>${CC}</code> in your Makefile as
this makes your program more portable.</p>
<p>See <a href="rules.html#rule15-gnu-makefile">Rule 15 - GNU Makefile</a>.</p>
<p>See <a href="guidelines.html#guideline9-no-interactive">Guidelines for Rule 9 - No interactive compiling
allowed</a>.</p>
<div id="rule10">
<h2 id="rule-10---program-file-permissions">Rule 10 - Program file permissions</h2>
</div>
<p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>,
super-user, special owner, special group, etc.) are <strong>HIGHLY
DISCOURAGED</strong>. We do <strong>NOT</strong> guarantee these functions will behave as
you expect on our test platforms.</p>
<p>If your program needs special permissions you <strong>MUST</strong> document this
fact and explain why it is needed in your submission’s <code>remarks.md</code>
file, preferably close to the top, because <code>mkiocccentry(1)</code> will
<strong>NOT</strong> set those modes.</p>
<p>Furthermore, if you need a supplementary program that you include to
have these permissions, you will also have to explain this as well,
because these bits are <strong>NOT</strong> allowed in submissions and those bits
will <strong>NOT</strong> be copied by <code>mkiocccentry(1)</code> either.</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>,
and
<a href="rules.html#rule5-modifying-files">Rule 5 - Do NOT modify files</a>.</p>
<div id="rule11">
<div id="rule11-legal-rule-abuse">
<h2 id="rule-11---legal-rule-abuse">Rule 11 - Legal rule abuse</h2>
</div>
</div>
<p>Legal abuse of the rules is <strong>somewhat</strong> encouraged, but comes with
risks. A submission that, in the opinion of the Judges, <strong>violates</strong>
the rules <strong>WILL BE DISQUALIFIED</strong>. Submissions that plan to abuse the
rules <strong>MUST</strong> justify why their rule abuse is legal (or interesting)
in the <code>remarks.md</code> file.</p>
<p>Submission packaging abuse will <strong>NOT</strong> be tolerated and for this reason,
amongst many other reasons, it is recommended that you use
<code>mkiocccentry(1)</code>. See also <a href="#rule17-mkiocccentry">Rule 17 - use
mkiocccentry</a>.</p>
<p>During development you can check your <code>prog.c</code> size limits using
<code>iocccsize(1)</code>, e.g., <code>iocccsize -v1 prog.c</code>. Overriding problems
detected by any of the IOCCC tools risks that the submission will be
rejected.</p>
<p>If you do submit a rule abusing or violating submission, then consider
also submitting an alternate version in a different submission server
slot that does <strong>NOT</strong> violate the rules in case your rule abuse excuse
is rejected.</p>
<p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing
version, <strong>PLEASE</strong> indicate that in your <code>remarks.md</code> file of your
non-rule abusing version so that the Judges don’t think you uploaded a
duplicate into a wrong slot by mistake.</p>
<p>See <a href="guidelines.html#guideline11-abuse">Guidelines for Rule 11 - Legal rule
abuse</a>.</p>
<div id="rule12">
<div id="rule12-utf8">
<h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2>
</div>
</div>
<p>Use of UTF-8 is supported by <code>C11</code> standard and its updates and so too
by the IOCCC.</p>
<p>See <a href="guidelines.html#guideline12-utf8">Guidelines for Rule 12 - UTF-8</a>.</p>
<div id="rule13">
<div id="rule13-nocr">
<h2 id="rule-13---no-carriage-returns-in-prog.c">Rule 13 - No carriage returns in prog.c</h2>
</div>
</div>
<p>Any C source that fails to compile because lines contain
carriage-returns (CTRL+M, <code>\r</code>) in particular as part of DOS/Windows
style newlines might be rejected. Please do <strong>NOT</strong> put trailing
CTRL+M in <code>prog.c</code>, <code>Makefile</code>, or <code>remarks.md</code> files, but instead end
lines with Unix newline (line-feed, CTRL+J, <code>\n</code>).</p>
<p>You are permitted, in order to try and squeeze your <code>prog.c</code> under a
<a href="rules.html#rule2a-gross-size">Rule 2a Gross Size</a> and/or <a href="rules.html#rule2b-net-size">Rule 2b Net
Size</a> limits, to <strong>NOT</strong> end source with a
newline. If you need to do this, please document that in your
<code>remarks.md</code> file and if your compiler complains about this, document
this too and update your <code>Makefile</code> to account for this.</p>
<p>See <a href="guidelines.html#guideline13-nocr">Guidelines for Rule 13 - No carriage returns in
prog.c</a>.</p>
<div id="rule14">
<h2 id="rule-14---resubmitting-lost-submissions">Rule 14 - Resubmitting lost submissions</h2>
</div>
<p>Submissions that are substantially similar to previous winning IOCCC
entries are discouraged. See the
FAQ on “<a href="../faq.html#frequent-themes">What types of entries have been frequently submitted to the
IOCCC?</a>.</p>
<p>You are allowed to resubmit to a later contest, a submission that
didn’t win the IOCCC. If you do so, then you would be <strong>WELL ADVISED</strong>
to try and enhance and improve your submission. If you do resubmit
something that didn’t previously win, then you are encouraged to
mention this in your <code>remarks.md</code> file as this <strong>sometimes</strong> helps.</p>
<div id="rule15">
<div id="rule15-gnu-makefile">
<h2 id="rule-15---gnu-makefile">Rule 15 - GNU Makefile</h2>
</div>
</div>
<p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly
recommended that you copy the <a href="Makefile.example">Makefile.example</a> as a
template, renaming it to <code>Makefile</code>. The primary target of the
<code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and the source file is <code>prog.c</code>. The C
compiler and preprocessor <strong>MUST</strong> be invoked using <code>${CC}</code> and
<code>${CPP}</code> macros respectively.
</p>
<p>The <code>clobber</code> target <strong>MUST</strong> clean and restore the submission
directory tree to its original state, such as removing temporary files
or any modified data files. Don’t assume that <code>git</code> tool chain is
installed, i.e. do <strong>NOT</strong> expect <code>git clean -f</code> to work. To be clear:
do <strong>NOT</strong> use <code>git</code> to clean out files as this <strong>WILL</strong> cause problems
in the winner repo!</p>
<p class="leftbar">
The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with <code>bash(1)</code>
and GNU <code>make(1)</code>. You are encouraged to use <code>SHELL= bash</code> in your
<code>Makefile</code>; please add a space between the <code>=</code> and the value such as:
</p>
<pre><code> SHELL= bash</code></pre>
<p class="leftbar">
Assume that commands commonly found in <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">Single UNIX
Specification</a>
environments and systems are available in the search
<code>$PATH</code>.
</p>
<p class="leftbar">
Avoid command options that aren’t part of
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>, such as
GNU long name options (such as <code>--example</code>) or extensions like <code>grep -P</code>.
</p>
<p>Do <strong>NOT</strong> assume that <code>.</code> (current directory) is in the <code>$PATH</code>
environment variable.</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See
FAQ on “<a href="../faq.html#makefile_details">What are the detailed recommendations for a submission
Makefile?</a>”.</p>
<p>See <a href="guidelines.html#guideline15-gnu-makefile">Guidelines for Rule 15 - GNU
Makefile</a>.</p>
<div id="rule16">
<div id="rule16-anonymous-judging">
<h2 id="rule-16---anonymous-judging">Rule 16 - Anonymous judging</h2>
</div>
</div>
<p>Your source code, data files, remarks, and program output <strong>MUST NOT</strong>
identify the author(s) of your code (unless you are <strong>Peter Honeyman</strong>
or pretending to be <strong>Peter Honeyman</strong>). In order to be impartial the
<a href="https://www.ioccc.org/judges.html">Judges</a> do <strong>NOT</strong> know who is
submitting programs to the IOCCC until final selection is made, and
<strong>only</strong> submissions that won.</p>
<p>Even if you are a past winner, you <strong>MUST NOT</strong> reveal your identity
deliberately or by accident anywhere in your submission. <strong><em>Failure to
comply may result in the submission being disqualified</em></strong>.</p>
<div id="rule17">
<div id="rule17-mkiocccentry">
<h2 id="rule-17---use-mkiocccentry">Rule 17 - Use <code>mkiocccentry</code></h2>
</div>
</div>
<p><strong>TL;DR</strong>: use <code>mkiocccentry(1)</code> to package your submission.</p>
<p>The files, directories, and paths <strong>MUST</strong> conform to the limits
imposed by <code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited to, their
names, count, path length, directory tree depth, and permissions.</p>
<p class="leftbar">
The submission tree may have at most <strong>13</strong> directories and maximum
directory depths of <strong>4</strong>. The maximum number of files, excluding
<code>prog.c</code>, <code>remarks.md</code>, <code>Makefile</code>, <code>prog.alt.c</code>, <code>try.sh</code>,
<code>try.alt.sh</code>, <code>.info.json</code> and <code>.auth.json</code> is <strong>31</strong>.
</p>
<p class="leftbar">
The maximum file-path component is <strong>38</strong> and the maximum
path length is <strong>60</strong>.
</p>
<p>The submission <strong>MUST</strong> be a <code>.txz</code> compressed tarball (i.e., tarball
compressed by <code>xz(1)</code>) <strong>as constructed by</strong> <code>mkiocccentry(1)</code>, which
<strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p>
<p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary
tarballs you provide <strong>MUST ALSO</strong> be <strong>v7 format</strong>.</p>
<p>The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong>
be less than <code>27651*1024</code> (<strong>28314624</strong>) bytes.</p>
<p class="leftbar">
The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball
filename <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well.
</p>
<p class="leftbar">
You may <strong>NOT</strong> submit a tarball created by the <code>-d</code>, <code>-e</code> <strong>OR</strong> by
the <code>-s seed</code> options of <code>mkiocccentry(1)</code>.
</p>
<p class="leftbar">
The unpacked submission directory <strong>MUST</strong> pass the checks performed by
the minimum required version of <code>chksubmit(1)</code>.
</p>
<p class="leftbar">
Submissions may <strong>NOT</strong> use a <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> command line
options that are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong>
labelled as “<strong>for the use by the IOCCC judges only</strong>”, in their
respective man pages.
</p>
<p class="leftbar">
Submissions may <strong>ONLY</strong> use <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> command lines that
confirm to the command’s <code>-h</code> “<em>print help message</em>”, again
notwithstanding the options for testing and the IOCCC judges.
</p>
<p class="leftbar">
The <code>prog.c</code> file should pass the <a href="rules.html#rule2-size">Rule 2 - Size
restrictions</a> checks performed by
<code>iocccsize(1)</code>.
</p>
<p class="leftbar">
The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be exactly
what the minimum required <code>mkiocccentry(1)</code> version generates.
</p>
<p class="leftbar">
Any submission that fails to pass the checks performed by the minimum
required version of the <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
toolkit</a> <strong>WILL be
rejected</strong>!
</p>
<p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See the
FAQ on “<a href="../faq.html#mkiocccentry">What is the mkiocccentry tool, how do I obtain it and how do I
use it?</a>”.</p>
<p>See the <a href="guidelines.html#guideline17-mkiocccentry">Guidelines for Rule 17 - Use
mkiocccentry</a>.</p>
<div id="rule18">
<h2 id="rule-18---submission-license">Rule 18 - Submission license</h2>
</div>
<p>The entirety of your submission <strong>MUST</strong> be submitted under the
following license:</p>
<p><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0
International</a>.</p>
<p>See <a href="rules.html#rule7-original-work">Rule 7 - Original Work</a>.</p>
<div id="rule19">
<div id="rule19-prime">
<h2 id="rule-19---prime">Rule 19 - Prime</h2>
</div>
</div>
<p class="leftbar">
This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added below this
rule in future contests.
</p>
<p>See <a href="rules.html#rule6-free-rule">Rule 6 - Free Rule</a>.</p>
<h2 id="further-reading">Further Reading</h2>
<p>Please read the <a href="guidelines.html">Guidelines</a> next for further
commentary on these rules.</p>
<p>Read the
FAQ on “<a href="https://www.ioccc.org/quick-start.html#enter">Entering the IOCCC: the bare minimum you need to
know</a>”
for an overview of how to enter the contest.</p>
<p>See also the <a href="../faq.html">FAQ</a> in general.</p>
<p>And now <a href="guidelines.html#fun">for something completely different</a>.</p>
<p>Consider joining the <a href="https://discord.com/invite/Wa42Qujwnw">IOCCC Discord
Server</a> for discussions about
The Rules, questions for the Judges, and <code>C</code> in general.</p>
<p>Leonid A. Broukhis
chongo (Landon Curt Noll) /\cc/\
<!-- AFTER: last line of markdown file: next/rules.md --></p>
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
<!-- START: this line starts content from: inc/after-content.default.html -->
</div>
<!-- END: this line ends content from: inc/after-content.default.html -->
<!-- START: this line starts content from: inc/footer.default.html -->
<!--
Copyright © 1984-2025 by Landon Curt Noll. All Rights Reserved.
You are free to share and adapt this file under the terms of this license:
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
For more information, see:
https://creativecommons.org/licenses/by-sa/4.0/
-->
<div class="footer">
<div id="copyright"><h3>Copyright &copy; 1984-2025 by Landon Curt Noll:
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
target="_blank"
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
<p>
This work is <b>licensed by Landon Curt Noll</b> under
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
target="_blank"
rel="license noopener noreferrer"
style="display:inline-block;">CC BY-SA 4.0</a></b>.
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../png/cc.png"
alt="cc inside circle symbol">
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../png/by.png"
alt="person inside circle symbol">
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
src="../png/sa.png"
alt="arrow looping back on itself inside circle symbol"><br>
You should <b>carefully review</b> the
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
target="_blank"
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
before using the licensed material.<br>
You may wish to review the
<b><a href="../license.html"
target="_blank"
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
of <b>CC BY-SA 4.0</b>.<br>
</p>
</div>
<div id="coda"><h3>Coda</h3>
<p>
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2Fnext%2Frules.html" rel="nofollow">Nu HTML check this web page</a><br>
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a>
</p>
</div>
</div>
<!-- END: this line ends content from: inc/footer.default.html -->
<!-- START: this line starts content from: inc/bottom.default.html -->
</body>
</html>
<!-- END: this line ends content from: inc/bottom.default.html -->