Fixes and minor improvements in rules

This includes typos (including command lines, formatting and other
things), renaming some rules to be a bit more intuitive and other things
I noticed.

Please note that I have not yet checked all links: not in other files or
in this file. This will be done after a break, and it likely will
involve updates to the guidelines and possibly the FAQ too. In other
words this is a work in progress that should be completed later today.
This commit is contained in:
Cody Boone Ferguson committed 2025-11-29 06:14:01 -08:00
1 parent 698cd8f92b
commit 87d8c627a0
2 files changed
+383 -279

No files matched your search

+180 -135
View File
@@ -460,9 +460,9 @@ IOCCC in the past.</p>
<p>These rules are a <strong>TENTATIVE proposal</strong> for the next IOCCC <p>These rules are a <strong>TENTATIVE proposal</strong> for the next IOCCC
and are <strong>likely be to be updated</strong> before the next IOCCC.</p> and are <strong>likely be to be updated</strong> before the next IOCCC.</p>
<p>See our <p>See our
FAQ on “<a href="../faq.html#feedback">rules, guidelines, tools feedback</a>” FAQ on “<a href="../faq.html#feedback">rules, guidelines and tools feedback</a>”
as well as our as well as our
FAQ on “<a href="../faq.html#question">about asking questions</a>” FAQ on “<a href="../faq.html#question">asking questions</a>”
about these rules. You might also find the FAQ in general useful, especially the 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> FAQ on “<a href="../quick-start.html#enter">how to enter the IOCCC</a>”.</p>
<p>Watch both <a href="../status.html">the IOCCC status page</a> and the <p>Watch both <a href="../status.html">the IOCCC status page</a> and the
@@ -474,14 +474,14 @@ app from time to time to view IOCCC mastodon updates.</p>
<!-- END: the next line ends content from: inc/rules.closed.hdr --> <!-- END: the next line ends content from: inc/rules.closed.hdr -->
<!-- This is the last line modified by the tool: bin/gen-status.sh --> <!-- 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> <h1 id="th-international-obfuscated-c-code-contest-official-rules">29th International Obfuscated C Code Contest Official Rules</h1>
<p>Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll.</p> <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 <p>All Rights Reserved. Permission for personal, education or non-profit use is
granted provided this copyright and notice are included in its entirety granted provided this copyright and notice are included in its entirety
and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in and remains unaltered. All other uses <strong>MUST</strong> receive prior permission in
writing by <a href="../contact.html">contacting the judges</a>.</p> writing by <a href="../contact.html">contacting the judges</a>.</p>
<h2 id="rules-version">Rules Version</h2> <h2 id="rules-version">Rules Version</h2>
<p>These IOCCC Rules are version <strong>29.08 2025-11-28</strong>.</p> <p>These IOCCC Rules are version <strong>29.09 2025-11-29</strong>.</p>
<p>Be sure to read the <a href="guidelines.html">IOCCC guidelines</a>.</p> <p>Reminder: be SURE to read the <a href="guidelines.html">IOCCC guidelines</a>.</p>
<div id="rule0"> <div id="rule0">
<h2 id="rule-0---dates">Rule 0 - Dates</h2> <h2 id="rule-0---dates">Rule 0 - Dates</h2>
</div> </div>
@@ -495,26 +495,28 @@ when people will no longer be allowed to upload submissions.</p>
<p>Until the contest enters the <strong>open</strong> state, any or all <p>Until the contest enters the <strong>open</strong> state, any or all
of the above <strong>dates and times may change <em>AT ANY TIME</em></strong>!</p> of the above <strong>dates and times may change <em>AT ANY TIME</em></strong>!</p>
<p>The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.</p> <p>The above timestamps are in “<em>YYYY-MM-DD HH:MM:SS.micros UTC</em>” format.</p>
<p>See <a href="../status.html">Current status of the IOCCC</a>.</p> <p>See the <a href="../status.html">current status of the IOCCC</a>.</p>
<div id="rule1"> <div id="rule1">
<h2 id="rule-1---program">Rule 1 - Program</h2> <h2 id="rule-1---c-program">Rule 1 - C program</h2>
</div> </div>
<p>Your submission <strong>MUST</strong> be a C program.</p> <p>Your submission <strong>MUST</strong> be a C program that does NOT <code>#include</code> data files.</p>
<div id="rule2"> <div id="rule2">
<h2 id="rule-2---size">Rule 2 - Size</h2> <h2 id="rule-2---size-restrictions">Rule 2 - Size restrictions</h2>
</div> </div>
<p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong> <p><code>Rule 2</code> requires that your submission satisfy <strong>BOTH</strong>
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a> <a href="rules.html#rule-2a-gross-size">Rule 2a &amp;lparen;Gross Size&amp;rparen;</a>
and and
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a>. <a href="rules.html#rule-2b-net-size">Rule 2b &amp;lparen;Net Size&amp;rparen;</a>.
During development this can be checked using <code>iocccsize(1)</code>:</p> During development this can be checked using <code>iocccsize(1)</code>:</p>
<p>iocccsize prog.c</p> <pre><code> iocccsize prog.c</code></pre>
<p>See <a href="guidelines.html#guideline-2---size">Guidelines for Rule 2 - Size</a>.</p> <p>See the <a href="guidelines.html#guideline-2---size">Guidelines for Rule 2 - Size restrictions</a>.</p>
<div id="rule2a"> <div id="rule2a">
<h3 id="rule-2a---gross-size">Rule 2a - Gross Size</h3> <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> <p>The overall maximum size of your <code>prog.c</code> program source <strong>MUST NOT</strong>
exceed <strong>4993</strong> bytes.</p> exceed <strong>4993</strong> bytes.</p>
<p><strong>NOTE</strong>: by default <code>iocccsize</code> will only report the rule 2b size, unless the
code surpasses the limit.</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="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<div id="rule2b"> <div id="rule2b">
<h3 id="rule-2b---net-size">Rule 2b - Net Size</h3> <h3 id="rule-2b---net-size">Rule 2b - Net Size</h3>
@@ -523,11 +525,15 @@ exceed <strong>4993</strong> bytes.</p>
command line argument to the latest version of the official IOCCC size command line argument to the latest version of the official IOCCC size
tool (hereby referred to as <code>iocccsize(1)</code>), the value printed <strong>MUST tool (hereby referred to as <code>iocccsize(1)</code>), the value printed <strong>MUST
NOT</strong> exceed <strong>2503</strong>.</p> NOT</strong> exceed <strong>2503</strong>.</p>
<p><strong>NOTE</strong>: <code>iocccsize</code> does <strong>NOT</strong> calculate the filename length. See <a href="#rule17-mkiocccentry">Rule 17 -
Use mkiocccentry</a>.</p>
<div id="rule3"> <div id="rule3">
<h2 id="rule-3---register">Rule 3 - Register</h2> <div id="rule3-register">
<h2 id="rule-3---you-must-register-to-enter-the-contest">Rule 3 - You must register to enter the contest</h2>
</div>
</div> </div>
<p>You <strong>MUST</strong> register, using a valid email address, in order to submit <p>You <strong>MUST</strong> register, using a valid email address, in order to submit
entries to the IOCCC. You may register while the contest is <strong>pending</strong> or <strong>open</strong>.</p> 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 <p>A few days after registering, you’ll receive your UUID username and
temporary password, which you <strong>MUST</strong> change within 14 days. If you temporary password, which you <strong>MUST</strong> change within 14 days. If you
fail to change it in a timely manner, you’ll need to fail to change it in a timely manner, you’ll need to
@@ -538,38 +544,53 @@ register and submit your entries; <strong>DO NOT WAIT UNTIL THE FINAL DAYS</stro
to register! The judges are <strong>NOT</strong> responsible for delayed or lost to register! The judges are <strong>NOT</strong> responsible for delayed or lost
email or for those who wait until the last minute to try to register!</p> email or for those who wait until the last minute to try to register!</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="../quick-start.html#enter">Entering the IOCCC: the bare minimum you need to know</a>.</p>
<p>See <a href="rules.html#rule-8---submission">Rule 8 - Submission</a>.</p> <p>See <a href="rules.html#rule8">Rule 8 - Submitting requirements</a>.</p>
<p>See <a href="guidelines.html#guideline-3---register">Guidelines for Rule 3 - Register</a>.</p> <p>See <a href="guidelines.html#guideline-3---register">Guidelines for Rule 3 - Registering for the IOCCC</a>.</p>
<div id="rule4"> <div id="rule4">
<h2 id="rule-4---files">Rule 4 - Files</h2> <div id="rule4-required-files">
<h2 id="rule-4---required-files">Rule 4 - Required files</h2>
</div> </div>
<p>The submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>, </div>
<code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code>.</p> <p>Your submission <strong>MUST</strong> include at least these files: <code>Makefile</code>, <code>prog.c</code>,
<p>At a minimum the following requirements apply. Additional requirements <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>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 may be imposed by <code>mkiocccentry(1)</code> updates that have yet to be listed
here:</p> below.</p>
<p><strong>NOTE</strong>: <code>mkiocccentry(1)</code> will reject any directory which has prohibited
files.</p>
<p><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>
<ul> <ul>
<li><p><code>.info.json</code>, and <code>.auth.json</code> <strong>MUST</strong> be generated by <code>mkiocccenty(1)</code> <li><p><code>.info.json</code> and <code>.auth.json</code> <strong>MUST</strong> be generated by <code>mkiocccenty(1)</code>
when packing a submission, and <strong>MUST</strong> pass the <code>chksubmit(1)</code> tests.</p></li> when packing a submission. When <code>chksubmit(1)</code> is run on the submission
directory <strong>ALL</strong> tests must pass and if there is <strong>ANY</strong> problem with these
JSON files or if either is missing it will fail. See <a href="#rule17-mkiocccentry">Rule 17 - use
mkiocccentry</a>.</p></li>
<li><p>The <code>Makefile</code>, <code>remarks.md</code>,<code>.info.json</code>, and <code>.auth.json</code> <strong>MUST</strong> <li><p>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>.</p></li> 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.</p></li>
<li><p>Your submitted source code <strong>MUST</strong> be called <code>prog.c</code>. When the <code>Makefile</code> <li><p>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>. 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.</p></li> The <code>Makefile</code> may compile your source code into other filenames as well, if you
want.</p></li>
<li><p>As <code>prog</code>, <code>prog.alt</code>, <code>prog.alt.o</code>, <code>prog.o</code> may be created by your <li><p>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 <code>Makefile</code>, your submission <strong>MUST NOT</strong> include those files in your <strong>top</strong>
your top directory, as original content.</p></li> directory.</p></li>
<li><p>Your submission may <strong>NOT</strong> have any file that starts with <code>COPYING</code>, <li><p>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> <code>COPYRIGHT</code>, or <code>LICENSE</code> as those files are reserved by IOCCC.</p></li>
<li><p>Your submission may <strong>NOT</strong> have in the top directory, <code>prog.orig.c</code>, <li><p>Your submission may <strong>NOT</strong> have in the <strong>top</strong> directory: <code>prog.orig.c</code>,
<code>README.md</code>, nor <code>index.html</code> as those files reserved by IOCCC.</p></li> <code>README.md</code> or <code>index.html</code> as those files are reserved by the IOCCC.</p></li>
<li><p>Your submission may <strong>NOT</strong> have in the top directory, any file <li><p>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> 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> as those files are reserved by IOCCC.</p></li>
<li><p>Your submission may <strong>ONLY</strong> contain files and directories. Other file <li><p>Your submission may <strong>ONLY</strong> contain files and directories. Other file
types such as symlinks, sockets, etc are <strong>NOT</strong> allowed.</p></li> types such as symlinks, sockets etc. are <strong>NOT</strong> allowed.</p></li>
<li><p>All directories <strong>MUST</strong> have a file mode of <strong>0755</strong>. All files <li><p><strong>All</strong> directories <strong>MUST</strong> have permission mode of <strong>0755</strong>. All files
<strong>MUST</strong> have the file mode of <strong>0444</strong>, except for files that <strong>MUST</strong> have the file mode of <strong>0444</strong>, EXCEPT for files that
end in <code>.sh</code> which must have a mode of <strong>0555</strong>.</p></li> end in <code>.sh</code> which must have a mode of <strong>0555</strong>.</p></li>
<li><p>All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format. <li><p>All files that end in <code>.md</code> <strong>MUST</strong> be in markdown format.
We recommend that markdown files observe our We recommend that markdown files observe our
@@ -582,29 +603,34 @@ a case insensitive filesystem.</p></li>
</ul> </ul>
<p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the Guidelines.</p> <p>The <code>remarks.md</code> and <code>Makefile</code> are explained in more detail in the Guidelines.</p>
<p>See <a href="../markdown.html">IOCCC markdown guidelines</a>.</p> <p>See <a href="../markdown.html">IOCCC markdown guidelines</a>.</p>
<p>See <a href="rules.html#rule-17---packaging">Rule 17 - Packaging</a>.</p> <p>See <a href="rules.html#rule-17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<p>See 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
<p>See <a href="guidelines.html#mkiocccentry_toolkit">Guidelines for the mkiocccentry toolkit</a>.</p> 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 <a href="guidelines.html#makefile">Guidelines for the Makefile</a>.</p> <p>See the <a href="guidelines.html#mkiocccentry_toolkit">Guidelines on the mkiocccentry toolkit</a>.</p>
<p>See the <a href="guidelines.html#makefile">Guidelines on the Makefile</a>.</p>
<div id="rule5"> <div id="rule5">
<h2 id="rule-5---integrity">Rule 5 - Integrity</h2> <div id="rule5-modifying-files">
<h2 id="rule-5---do-not-modify-submitted-files-or-filenames-or-parent-directories">Rule 5 - Do NOT modify submitted files or filenames or parent directories</h2>
</div> </div>
<p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of </div>
your original submission, such as <code>prog.c</code>, <code>Makefile</code>, or any supplied <p>Your submission <strong>MUST NOT</strong> modify the filenames or content of any of your
data files. To modify files, your program can make a copy or you can original submission, such as <code>prog.c</code>, <code>Makefile</code>, or <strong>ANY</strong> other supplied
use the <code>Makefile</code> to setup working copies. Any working copies <strong>MUST</strong> be files. To modify files, your program can make a copy or you can use the
cleaned up by the <code>Makefile</code> <code>clobber</code> target, so as to restore the <code>Makefile</code> to setup working copies. Any working copies <strong>MUST</strong> be cleaned up
directory to its original state.</p> by the <code>Makefile</code> <code>clobber</code> target, so as to restore the directory to its
original state.</p>
<p>Your submission <strong>MUST NOT</strong> create or modify directories and files <p>Your submission <strong>MUST NOT</strong> create or modify directories and files
ABOVE the current directory with the exception of the <code>/tmp</code> and the ABOVE the current directory (with the exception of the <code>/tmp</code> and the <code>/var/tmp</code>
<code>/var/tmp</code> directories as long as the directory name or filename does directories and as long as the directory name or filename does <strong>NOT</strong> start
<strong>NOT</strong> start with “.” (dot).</p> with a <code>.</code> (dot)).</p>
<p>The <code>Makefile</code> <code>clobber</code> target <strong>MUST</strong> be restore your submission into <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> original form, including the removal of any created files and directories.</p>
<p>Your code should be able to run under a <p>Your code should be able to run under a
<a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>.</p> <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>.</p>
<div id="rule6"> <div id="rule6">
<h2 id="rule-6---free">Rule 6 - Free</h2> <div id="rule6-free-rule">
<h2 id="rule-6---free-rule">Rule 6 - Free Rule</h2>
</div>
</div> </div>
<p>I am <strong>NOT</strong> a Rule, I am a <code>free(void *human);</code> ‼️</p> <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)))))) { <pre><code> while (!(ioccc(rule(you(are(number(6)))))) {
@@ -614,82 +640,93 @@ original form, including the removal of any created files and directories.</p>
<div id="rule7"> <div id="rule7">
<h2 id="rule-7---original-work">Rule 7 - Original Work</h2> <h2 id="rule-7---original-work">Rule 7 - Original Work</h2>
</div> </div>
<p>You, the author(s), <strong>MUST</strong> own the contents of your submission, or you <strong>MUST</strong> <p>You, the author(s), <strong>MUST</strong> own the contents of your submission, <strong>OR</strong>, IF you
have permission from the original owner(s) to its use. If you submit do <strong>NOT</strong> own the work, then you <strong>MUST</strong> have permission from the original
any content that is owned by others, you <strong>MUST</strong> detail that ownership, owner(s) to its use. If you submit <strong>ANY</strong> content that is owned by others, you
i.e., who owns what, and document the permission you obtained from them <strong>MUST</strong> detail that ownership, i.e., who owns what, and document the permission
in your <code>remarks.md</code> file.</p> you obtained from them in your <code>remarks.md</code> file.</p>
<p>You are permitted to use tools to write your code.</p> <p>You are permitted to use tools to write your code.</p>
<p>See <a href="rules.html#rule-16---anonymous">Rule 16 - Anonymous</a>.</p> <p>See <a href="rules.html#rule-16-anonymous-judging">Rule 16 - Anonymous Judging</a>.</p>
<p>See <a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p> <p>See <a href="guidelines.html#guideline-7---original-work">Guidelines for Rule 7 - Original Work</a>.</p>
<div id="rule8"> <div id="rule8">
<h2 id="rule-8---submission">Rule 8 - Submission</h2> <h2 id="rule-8---submitting-requirements">Rule 8 - Submitting requirements</h2>
</div> </div>
<p>The Submit Server will only accept submissions from those who have <p>The submit server will accept submissions <strong>ONLY</strong> from those who have
registered and only while the contest is open.</p> registered and <strong>ONLY</strong> while the contest is open.</p>
<p>The Submit Server places a total submission size limit of <strong>3999971</strong> bytes.</p> <p>The submit server places a total size limit of <strong>3999971</strong> bytes <strong>PER</strong>
submission.</p>
<p>Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission <p>Each account has ten (<strong>10.000</strong>) submission slots (<strong>0..9)</strong>. Each submission
slot should be annotated by the server as to whether its was received, slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify, processed, malformed, etc. Please take note of any errors, rectify,
and resubmit. In order to avoid potential packaging errors, it is <strong>highly and resubmit. In order to avoid potential packaging errors, it is <strong>highly
recommended</strong> to use <code>mkiocccentry(1)</code>.</p> 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>Do <strong>NOT</strong> register more than one account!</p>
<p>See <p>See
<a href="rules.html#rule-3---register">Rule 3 - Register</a>, <a href="rules.html#rule3-register">Rule 3 - Registering for the IOCCC</a>,
<a href="rules.html#rule-15---building">Rule 15 - Building</a>, <a href="rules.html#rule-15---building">Rule 15 - GNU Makefile compatibility</a>,
and and
<a href="rules.html#rule-17---packaging">Rule 17 - Packaging</a>.</p> <a href="rules.html#rule-17-mkiocccentry">Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule9"> <div id="rule9">
<h2 id="rule-9---no-hands">Rule 9 - No hands</h2> <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> <p>Entries requiring human interaction to be initially compiled are <strong>NOT</strong>
permitted. However, see the guidelines. Each entry <strong>MUST</strong> automate the permitted. However, see the guidelines. Each entry <strong>MUST</strong> automate the
build process using <code>bash</code>, <code>gmake</code>, <code>gcc</code>, <code>clang</code>, under a build process using <code>bash</code>, <code>gmake</code>, <code>gcc</code> and/or <code>clang</code> and other commonly
<a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS environment</a>.</p> available tools under an <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">SUS
environment</a>.</p>
<p><strong>NOTE</strong>: The references to <code>gmake(1)</code> can be any GNU Make compatible tool.</p> <p><strong>NOTE</strong>: The references to <code>gmake(1)</code> can be any GNU Make compatible tool.</p>
<p>See <a href="rules.html#rule-15---building">Rule 15 - Building</a>.</p> <p><strong>NOTE</strong>: it is better to use the <code>${MAKE}</code> variable as then one may override
the make command.</p>
<p><strong>NOTE</strong>: it is better and more portable to <strong>NOT</strong> modify the <code>${CC}</code> variable
in the Makefile.</p>
<p>See <a href="rules.html#rule-15---building">Rule 15 - GNU Makefile compatibility</a>.</p>
<div id="rule10"> <div id="rule10">
<h2 id="rule-10---privileges">Rule 10 - Privileges</h2> <h2 id="rule-10---program-file-permissions">Rule 10 - Program file permissions</h2>
</div> </div>
<p>Programs that require special privileges (<code>setuid(2)</code>, <code>setgid(2)</code>, <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>. 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 We do <strong>NOT</strong> guarantee these functions will behave as you expect on our
test platforms. If your program needs special permissions you <strong>MUST</strong> test platforms. If your program needs special permissions you <strong>MUST</strong>
document this fact and explain why it is needed in your submission’s document this fact and explain why it is needed in your submission’s
<code>remarks.md</code> file.</p> <code>remarks.md</code> file, preferably close to the top.</p>
<p>Furthermore, if you need a supplementary program that you include to <p>Furthermore, if you need a supplementary program that you include to
have these permissions, you will also have to explain this, because these 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 bits are <strong>NOT</strong> allowed in submissions and those bits will <strong>NOT</strong> be copied by
<code>mkiocccentry(1)</code>.</p> <code>mkiocccentry(1)</code>.</p>
<p>See <a href="rules.html#rule-4---files">Rule 4 - Files</a>, <p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>,
and and
<a href="rules.html#rule-5---integrity">Rule 5 - Integrity</a>.</p> <a href="rules.html#rule5-modifying-files">Rule 5 - Do NOT modify files</a>.</p>
<div id="rule11"> <div id="rule11">
<h2 id="rule-11---abuse">Rule 11 - Abuse</h2> <h2 id="rule-11---legal-rule-abuse">Rule 11 - Legal rule abuse</h2>
</div> </div>
<p>Legal abuse of the rules is somewhat encouraged, but comes with risks. <p>Legal abuse of the rules is <strong>somewhat</strong> encouraged, but comes with risks.
A submission that, in the opinion of the Judges, violates the rules <strong>WILL 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 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> 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 <p>Submission packaging abuse will <strong>NOT</strong> be tolerated and for this reason,
its recommended to use <code>mkiocccentry(1)</code>. During development you can amongst many others, it is recommended that you use <code>mkiocccentry(1)</code>. During
check your <code>prog.c</code> size limits using <code>iocccsize(1)</code>, e.g., <code>iocccsize -v1 prog.c</code>. development you can check your <code>prog.c</code> size limits using <code>iocccsize(1)</code>, e.g.,
Overriding problems detected by any of the IOCCC tools <code>iocccsize -v1 prog.c</code>. Overriding problems detected by any of the IOCCC tools
risks that the submission will be rejected.</p> risks that the submission will be rejected.</p>
<p>If you do submit a rule abusing or violating submission, then consider <p>If you do submit a rule abusing or violating submission, then consider
also submitting an alternate version in a different submission server 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 slot that does <strong>NOT</strong> violate the rules in case your rule abuse excuse
is rejected.</p> is rejected.</p>
<p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing <p><strong>IMPORTANT</strong>: If you do submit such an alternate non-rule abusing
version, please indicate that in your <code>remarks.md</code> file of your non-rule 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 abusing version so that the Judges don’t think you uploaded a duplicate into a
into a wrong slot by mistake.</p> wrong slot by mistake.</p>
<p>See <a href="guidelines.html#guideline-11---abuse">Guidelines for Rule 11 - Abuse</a>.</p> <p>See <a href="guidelines.html#guideline-11---abuse">Guidelines for Rule 11 - Legal rule
abuse</a>.</p>
<div id="rule12"> <div id="rule12">
<h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2> <h2 id="rule-12---utf-8">Rule 12 - UTF-8</h2>
</div> </div>
<p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too by the IOCCC.</p> <p>Use of UTF-8 is supported by <code>C89</code> standard and its updates and so too by the
IOCCC.</p>
<div id="rule13"> <div id="rule13">
<h2 id="rule-13---newlines">Rule 13 - Newlines</h2> <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 <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 (CTRL+M, <code>\r</code>) in particular as part of DOS/Windows style newlines might
@@ -698,33 +735,33 @@ or <code>remarks.md</code> files, but instead end lines with Unix newline (line-
CTRL+J, <code>\n</code>).</p> CTRL+J, <code>\n</code>).</p>
<p>You are permitted, in order to try and squeeze your <code>prog.c</code> under a <p>You are permitted, in order to try and squeeze your <code>prog.c</code> under a
<a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a> and/or <a href="rules.html#rule-2a-gross-size">Rule 2a Gross Size</a> and/or
<a href="rules.html#rule-2b-net-size">Rule 2b Next Size</a> <a href="rules.html#rule-2b-net-size">Rule 2b Net Size</a>
limits, to <strong>NOT</strong> end source with a newline. If you 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 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 your compiler complains about this, document this too and update your
<code>Makefile</code> to account for this.</p> <code>Makefile</code> to account for this.</p>
<div id="rule14"> <div id="rule14">
<h2 id="rule-14---resubmit">Rule 14 - Resubmit</h2> <h2 id="rule-14---resubmitting-lost-submissions">Rule 14 - Resubmitting lost submissions</h2>
</div> </div>
<p>Submissions that are substantially similar to previous winning IOCCC <p>Submissions that are substantially similar to previous winning IOCCC
entries are discouraged.</p> entries are discouraged.</p>
<p>You are allowed to resubmit to a later contest, a submission that didn’t <p>You are allowed to resubmit to a later contest, a submission that didn’t win the
win the IOCCC. If you do so, then you would be well advised to try and IOCCC. If you do so, then you would be <strong>WELL ADVISED</strong> to try and enhance and
enhance and improve your submission. If you do resubmit something that improve your submission. If you do resubmit something that didn’t previously
didn’t previously win, then you are encouraged to mention this in your win, then you are encouraged to mention this in your <code>remarks.md</code> file as this
<code>remarks.md</code> file as this sometimes helps.</p> <strong>sometimes</strong> helps.</p>
<div id="rule15"> <div id="rule15">
<h2 id="rule-15---building">Rule 15 - Building</h2> <h2 id="rule-15---gnu-makefile-compatibility">Rule 15 - GNU Makefile compatibility</h2>
</div> </div>
<p>The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. Its recommended <p>The <code>Makefile</code> <strong>MUST</strong> adhere to GNU Makefile syntax. It’s highly recommended
that you copy and rename the <code>Makefile.example</code> as a template. The primary that you copy the <a href="Makefile.example">Makefile.example</a> as a template, renaming
target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and the source file is <code>prog.c</code>. it to <code>Makefile</code>. The primary target of the <code>Makefile</code> <strong>MUST</strong> be <code>prog</code> and
The C compiler and preprocessor <strong>MUST</strong> be invoked using <code>${CC}</code> and <code>${CPP}</code> the source file is <code>prog.c</code>. The C compiler and preprocessor <strong>MUST</strong> be
macros respectively.</p> invoked using <code>${CC}</code> and <code>${CPP}</code> macros respectively.</p>
<p>The <code>clobber</code> target should clean and restore the submission directory <p>The <code>clobber</code> target <strong>MUST</strong> clean and restore the submission directory tree to
tree to its original state, such as removing temporary files or any its original state, such as removing temporary files or any modified data files.
modified data files. Don’t assume that <code>git</code> tool chain is installed, 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
i.e., do <strong>NOT</strong> expect <code>git clean -f</code> to work.</p> can cause problems in the winner repo!</p>
<p>The <code>Makefile</code> <strong>MUST</strong> use a syntax that is compatible with <p>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 <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> the value such as:</p>
@@ -734,25 +771,30 @@ Specification</a>
environments and systems are available in the search environments and systems are available in the search
<code>$PATH</code>. Avoid command options that aren’t part of <code>$PATH</code>. Avoid command options that aren’t part of
<a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>, such as <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">SUS</a>, such as
GNU long name options <code>--example</code> or extensions like <code>grep -P</code>.</p> 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>Do <strong>NOT</strong> assume that <code>.</code> (current directory) is in the <code>$PATH</code> environment
<p>See <a href="rules.html#rule-4---files">Rule 4 - Files</a>.</p> variable.</p>
<p>See <a href="rules.html#rule-4---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 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#guideline-15---building">Guidelines for Rule 15 - Building</a>.</p> <p>See <a href="guidelines.html#guideline-15---building">Guidelines for Rule 15 - GNU Makefile compatibility</a>.</p>
<div id="rule16"> <div id="rule16">
<h2 id="rule-16---anonymous">Rule 16 - Anonymous</h2> <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> <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> 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 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 <a href="https://www.ioccc.org/judges.html">Judges</a> do <strong>NOT</strong> know who is submitting
entries to the IOCCC until final selection is made. Even if you are programs to the IOCCC until final selection is made, and <strong>only</strong> submissions
a past winner, you <strong>MUST NOT</strong> reveal your identity deliberately or by that won.</p>
accident anywhere in your submission. <strong><em>Failure to comply may result <p>Even if you are a past winner, you <strong>MUST NOT</strong> reveal your identity
in the submission being disqualified.</em></strong></p> 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">
<h2 id="rule-17---packaging">Rule 17 - Packaging</h2> <div id="rule17-mkiocccentry">
<h2 id="rule-17---use-mkiocccentry">Rule 17 - Use <code>mkiocccentry</code></h2>
</div> </div>
</div>
<p>TL;DR: 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 <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 <code>mkiocccentry(1)</code>, including but <strong>NOT</strong> limited, to their names, count, path
length, directory tree depth, and permissions.</p> length, directory tree depth, and permissions.</p>
@@ -763,33 +805,36 @@ directory depths of <strong>4</strong>. The maximum number of files, excluding
component is <strong>38</strong> and maximum path length is <strong>60</strong>.</p> component is <strong>38</strong> and 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>) <p>The submission <strong>MUST</strong> be a <code>.txz</code> compressed tarball (i.e., tarball compressed by <code>xz(1)</code>)
as constructed by <code>mkiocccentry(1)</code>, which <strong>MUST</strong> be within <strong>[1..3999971]</strong> bytes in size.</p> as constructed by <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.</p> <p>The tarball <strong>MUST</strong> be a <strong>v7 format</strong> tarball, and any supplementary tarballs
you provide <strong>MUST</strong> also be <strong>v7 format</strong>.</p>
<p>The sum of all file lengths, after unpacking from the tarball, <strong>MUST</strong> be <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> less than <code>27651*1024</code> (<strong>28314624</strong>) bytes.</p>
<p>The submission <strong>MUST</strong> be a tarball file that <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball <p>The submission <strong>MUST</strong> pass all <code>txzchk(1)</code> checks, and the tarball filename
filename <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks.</p> <strong>MUST</strong> pass all <code>fnamchk(1)</code> checks as well.</p>
<p>You may <strong>NOT</strong> submit a tarball created by the <code>-d</code>, <code>-e</code>, <strong>NOR</strong> by the <code>-s seed</code> options of <code>mkiocccentry(1)</code>.</p> <p>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>The unpacked submission directory <strong>MUST</strong> pass the checks performed by the <p>The unpacked submission directory <strong>MUST</strong> pass the checks performed by the
current version of <code>chksubmit(1)</code>.</p> minimum required version of <code>chksubmit(1)</code>.</p>
<p>Submissions may <strong>NOT</strong> use a <p>Submissions may <strong>NOT</strong> use a <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> toolkit</a> command line options that
command line options that labeled as “<strong>for TESTING purposes</strong>”, are labelled as “<strong>for TESTING purposes</strong>”, <strong>OR</strong> labelled as “<strong>for the use by
<strong>NOR</strong> labeled as “<strong>for the use by the IOCCC judges only</strong>”, the IOCCC judges only</strong>”, in their respective man pages.</p>
in their respective man pages.</p> <p>Submissions may <strong>ONLY</strong> use <a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry
<p>Submissions may <strong>ONLY</strong> use toolkit</a> command lines that confirm
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> to the command’s <code>-h</code> “<em>print help message</em>”, again notwithstanding the options
command lines that confirm to the command’s <code>-h</code> “<em>print help message</em>”.</p> for testing and the IOCCC judges.</p>
<p>The <code>prog.c</code> file <strong>MUST</strong> pass the <a href="rules.html#rule-2---size">Rule 2 - Size</a> <p>The <code>prog.c</code> file <strong>MUST</strong> pass the <a href="rules.html#rule-2---size">Rule 2 - Size</a>
size checks performed by <code>iocccsize(1)</code>.</p> checks performed by <code>iocccsize(1)</code>.</p>
<p>The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what <code>chksubmit(1)</code> generates.</p> <p>The <code>.auth.json</code> and <code>.info.json</code> files <strong>MUST</strong> be compatible with what
<p>Any submission that fails to pass the checks performed by the most recent version of the <code>mkiocccentry(1)</code> generates.</p>
<a href="https://github.com/ioccc-src/mkiocccentry">mkiocccentry toolkit</a> <p>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> <strong>WILL be rejected</strong>!</p>
<p>See <a href="rules.html#rule-4---files">Rule 4 - Files</a>.</p> <p>See <a href="rules.html#rule4-required-files">Rule 4 - Required files</a>.</p>
<p>See 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
<p>See <a href="guidelines.html#guideline-17---packaging">Guidelines for Rule 17 - Packaging</a>.</p> 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#guideline-17---packaging">Guidelines for Rule 17 - Use mkiocccentry</a>.</p>
<div id="rule18"> <div id="rule18">
<h2 id="rule-18---license">Rule 18 - License</h2> <h2 id="rule-18---submission-license">Rule 18 - Submission license</h2>
</div> </div>
<p>The entirety of your submission <strong>MUST</strong> be submitted under the following license:</p> <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><a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International</a></p>
@@ -800,7 +845,7 @@ size checks performed by <code>iocccsize(1)</code>.</p>
<p>This 19th rule, while prime, is reserved for future abuse 😁. <p>This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added Additional rules, both humorous and otherwise, may be added
below this rule in future contests.</p> below this rule in future contests.</p>
<p>See <a href="rules.html#rule-6---free">Rule 6 - Free</a>.</p> <p>See <a href="rules.html#rule6-free">Rule 6 - Free Rule</a>.</p>
<h2 id="further-reading">Further Reading</h2> <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>Please read the <a href="guidelines.html">Guidelines</a> next for further commentary on these rules.</p>
<p>Read the <p>Read the
+203 -144
View File
@@ -10,9 +10,9 @@ These rules are a **TENTATIVE proposal** for the next IOCCC
and are **likely be to be updated** before the next IOCCC. and are **likely be to be updated** before the next IOCCC.
See our See our
FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" FAQ on "[rules, guidelines and tools feedback](../faq.html#feedback)"
as well as our as well as our
FAQ on "[about asking questions](../faq.html#question)" FAQ on "[asking questions](../faq.html#question)"
about these rules. You might also find the FAQ in general useful, especially the about these rules. You might also find the FAQ in general useful, especially the
FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". FAQ on "[how to enter the IOCCC](../quick-start.html#enter)".
@@ -29,7 +29,7 @@ app from time to time to view IOCCC mastodon updates.
# 29th International Obfuscated C Code Contest Official Rules # 29th International Obfuscated C Code Contest Official Rules
Copyright © 2025 Leonid A. Broukhis and Landon Curt Noll. Copyright (c) 2025 Leonid A. Broukhis and Landon Curt Noll.
All Rights Reserved. Permission for personal, education or non-profit use is All Rights Reserved. Permission for personal, education or non-profit use is
granted provided this copyright and notice are included in its entirety granted provided this copyright and notice are included in its entirety
@@ -39,9 +39,9 @@ writing by [contacting the judges](../contact.html).
## Rules Version ## Rules Version
These IOCCC Rules are version **29.08 2025-11-28**. These IOCCC Rules are version **29.09 2025-11-29**.
Be sure to read the [IOCCC guidelines](guidelines.html). Reminder: be SURE to read the [IOCCC guidelines](guidelines.html).
<div id="rule0"> <div id="rule0">
@@ -64,29 +64,31 @@ of the above **dates and times may change _AT ANY TIME_**!
The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format. The above timestamps are in "_YYYY-MM-DD HH:MM:SS.micros UTC_" format.
See [Current status of the IOCCC](../status.html). See the [current status of the IOCCC](../status.html).
<div id="rule1"> <div id="rule1">
## Rule 1 - Program ## Rule 1 - C program
</div> </div>
Your submission **MUST** be a C program. Your submission **MUST** be a C program that does NOT `#include` data files.
<div id="rule2"> <div id="rule2">
## Rule 2 - Size ## Rule 2 - Size restrictions
</div> </div>
`Rule 2` requires that your submission satisfy **BOTH** `Rule 2` requires that your submission satisfy **BOTH**
[Rule 2a Gross Size](rules.html#rule-2a-gross-size) [Rule 2a &lparen;Gross Size&rparen;](rules.html#rule-2a-gross-size)
and and
[Rule 2b Next Size](rules.html#rule-2b-net-size). [Rule 2b &lparen;Net Size&rparen;](rules.html#rule-2b-net-size).
During development this can be checked using `iocccsize(1)`: During development this can be checked using `iocccsize(1)`:
``` <!---sh-->
iocccsize prog.c iocccsize prog.c
```
See [Guidelines for Rule 2 - Size](guidelines.html#guideline-2---size). See the [Guidelines for Rule 2 - Size restrictions](guidelines.html#guideline-2---size).
<div id="rule2a"> <div id="rule2a">
@@ -96,6 +98,9 @@ See [Guidelines for Rule 2 - Size](guidelines.html#guideline-2---size).
The overall maximum size of your `prog.c` program source **MUST NOT** The overall maximum size of your `prog.c` program source **MUST NOT**
exceed **4993** bytes. exceed **4993** bytes.
**NOTE**: by default `iocccsize` will only report the rule 2b size, unless the
code surpasses the limit.
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
@@ -108,13 +113,18 @@ command line argument to the latest version of the official IOCCC size
tool (hereby referred to as `iocccsize(1)`), the value printed **MUST tool (hereby referred to as `iocccsize(1)`), the value printed **MUST
NOT** exceed **2503**. NOT** exceed **2503**.
**NOTE**: `iocccsize` does **NOT** calculate the filename length. See [Rule 17 -
Use mkiocccentry](#rule17-mkiocccentry).
<div id="rule3"> <div id="rule3">
## Rule 3 - Register <div id="rule3-register">
## Rule 3 - You must register to enter the contest
</div>
</div> </div>
You **MUST** register, using a valid email address, in order to submit You **MUST** register, using a valid email address, in order to submit
entries to the IOCCC. You may register while the contest is **pending** or **open**. to the IOCCC. You may register while the contest is **pending** or **open**.
A few days after registering, you'll receive your UUID username and A few days after registering, you'll receive your UUID username and
temporary password, which you **MUST** change within 14 days. If you temporary password, which you **MUST** change within 14 days. If you
@@ -129,51 +139,69 @@ email or for those who wait until the last minute to try to register!
See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter). See [Entering the IOCCC: the bare minimum you need to know](../quick-start.html#enter).
See [Rule 8 - Submission](rules.html#rule-8---submission). See [Rule 8 - Submitting requirements](rules.html#rule8).
See [Guidelines for Rule 3 - Register](guidelines.html#guideline-3---register). See [Guidelines for Rule 3 - Registering for the IOCCC](guidelines.html#guideline-3---register).
<div id="rule4"> <div id="rule4">
## Rule 4 - Files <div id="rule4-required-files">
## Rule 4 - Required files
</div>
</div> </div>
The submission **MUST** include at least these files: `Makefile`, `prog.c`, Your submission **MUST** include at least these files: `Makefile`, `prog.c`,
`remarks.md`,`.info.json`, and `.auth.json`. `remarks.md`,`.info.json`, and `.auth.json`, the latter two of which are
generated by `mkiocccentry(1)`. See [Rule 17 -
Use mkiocccentry](#rule17-mkiocccentry).
At a minimum the following requirements apply. Additional requirements At a **minimum** the following requirements apply. Additional requirements
may be imposed by `mkiocccentry(1)` updates that have yet to be listed may be imposed by `mkiocccentry(1)` updates that have yet to be listed
here: below.
* `.info.json`, and `.auth.json` **MUST** be generated by `mkiocccenty(1)` **NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited
when packing a submission, and **MUST** pass the `chksubmit(1)` tests. files.
**NOTE**: by 'top directory' we mean the directory with `prog.c`, `Makefile`,
`remarks.md` and the `mkiocccentry(1)` generated files `.auth.json` and
`.info.json` and **NOT** the `topdir` arg to `mkiocccentry(1)`.
* `.info.json` and `.auth.json` **MUST** be generated by `mkiocccenty(1)`
when packing a submission. When `chksubmit(1)` is run on the submission
directory **ALL** tests must pass and if there is **ANY** problem with these
JSON files or if either is missing it will fail. See [Rule 17 - use
mkiocccentry](#rule17-mkiocccentry).
* The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST** * The `Makefile`, `remarks.md`,`.info.json`, and `.auth.json` **MUST**
have a file size **greater than 0**. have a file size **greater than 0** and **MUST** have content. Note that
`mkiocccentry(1)` will check for file **size** but will **NOT** check for
content.
* Your submitted source code **MUST** be called `prog.c`. When the `Makefile` * Your submitted source code **MUST** be called `prog.c`. When the `Makefile`
compiles your code, the executable (if applicable) **MUST** be called `prog`. compiles your code, the executable (if applicable) **MUST** be called `prog`.
The `Makefile` may compile your source code into other filenames as well. The `Makefile` may compile your source code into other filenames as well, if you
want.
* As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your * As `prog`, `prog.alt`, `prog.alt.o`, `prog.o` may be created by your
`Makefile`, your submission **MUST NOT** include those files in `Makefile`, your submission **MUST NOT** include those files in your **top**
your top directory, as original content. directory.
* Your submission may **NOT** have any file that starts with `COPYING`, * Your submission may **NOT** have any file that starts with `COPYING`,
`COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC. `COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC.
* Your submission may **NOT** have in the top directory, `prog.orig.c`, * Your submission may **NOT** have in the **top** directory: `prog.orig.c`,
`README.md`, nor `index.html` as those files reserved by IOCCC. `README.md` or `index.html` as those files are reserved by the IOCCC.
* Your submission may **NOT** have in the top directory, any file * Your submission may **NOT** have in the **top** directory any file
that matches a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2` that matches a file glob pattern form `[0-9][0-9][0-9][0-9]_*.tar.bz2`
as those files are reserved by IOCCC. as those files are reserved by IOCCC.
* Your submission may **ONLY** contain files and directories. Other file * Your submission may **ONLY** contain files and directories. Other file
types such as symlinks, sockets, etc are **NOT** allowed. types such as symlinks, sockets etc. are **NOT** allowed.
* All directories **MUST** have a file mode of **0755**. All files * **All** directories **MUST** have permission mode of **0755**. All files
**MUST** have the file mode of **0444**, except for files that **MUST** have the file mode of **0444**, EXCEPT for files that
end in `.sh` which must have a mode of **0555**. end in `.sh` which must have a mode of **0555**.
* All files that end in `.md` **MUST** be in markdown format. * All files that end in `.md` **MUST** be in markdown format.
@@ -190,32 +218,35 @@ The `remarks.md` and `Makefile` are explained in more detail in the Guidelines.
See [IOCCC markdown guidelines](../markdown.html). See [IOCCC markdown guidelines](../markdown.html).
See [Rule 17 - Packaging](rules.html#rule-17---packaging). See [Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry).
See FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)". See the
FAQ on "[What permissions may my files be and what if I need different permissions?](../faq.html#file_perms)".
See [Guidelines for the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit). See the [Guidelines on the mkiocccentry toolkit](guidelines.html#mkiocccentry_toolkit).
See [Guidelines for the Makefile](guidelines.html#makefile). See the [Guidelines on the Makefile](guidelines.html#makefile).
<div id="rule5"> <div id="rule5">
## Rule 5 - Integrity <div id="rule5-modifying-files">
## Rule 5 - Do NOT modify submitted files or filenames or parent directories
</div>
</div> </div>
Your submission **MUST NOT** modify the filenames or content of any of Your submission **MUST NOT** modify the filenames or content of any of your
your original submission, such as `prog.c`, `Makefile`, or any supplied original submission, such as `prog.c`, `Makefile`, or **ANY** other supplied
data files. To modify files, your program can make a copy or you can files. To modify files, your program can make a copy or you can use the
use the `Makefile` to setup working copies. Any working copies **MUST** be `Makefile` to setup working copies. Any working copies **MUST** be cleaned up
cleaned up by the `Makefile` `clobber` target, so as to restore the by the `Makefile` `clobber` target, so as to restore the directory to its
directory to its original state. original state.
Your submission **MUST NOT** create or modify directories and files Your submission **MUST NOT** create or modify directories and files
ABOVE the current directory with the exception of the `/tmp` and the ABOVE the current directory (with the exception of the `/tmp` and the `/var/tmp`
`/var/tmp` directories as long as the directory name or filename does directories and as long as the directory name or filename does **NOT** start
**NOT** start with "." (dot). with a `.` (dot)).
The `Makefile` `clobber` target **MUST** be restore your submission into The `Makefile` `clobber` target **MUST** restore your submission to its
original form, including the removal of any created files and directories. original form, including the removal of any created files and directories.
Your code should be able to run under a Your code should be able to run under a
@@ -223,7 +254,9 @@ Your code should be able to run under a
<div id="rule6"> <div id="rule6">
## Rule 6 - Free <div id="rule6-free-rule">
## Rule 6 - Free Rule
</div>
</div> </div>
I am **NOT** a Rule, I am a `free(void *human);` ‼️ I am **NOT** a Rule, I am a `free(void *human);` ‼️
@@ -240,89 +273,101 @@ See [Rule 19 - Prime](rules.html#rule-19---prime).
## Rule 7 - Original Work ## Rule 7 - Original Work
</div> </div>
You, the author(s), **MUST** own the contents of your submission, or you **MUST** You, the author(s), **MUST** own the contents of your submission, **OR**, IF you
have permission from the original owner(s) to its use. If you submit do **NOT** own the work, then you **MUST** have permission from the original
any content that is owned by others, you **MUST** detail that ownership, owner(s) to its use. If you submit **ANY** content that is owned by others, you
i.e., who owns what, and document the permission you obtained from them **MUST** detail that ownership, i.e., who owns what, and document the permission
in your `remarks.md` file. you obtained from them in your `remarks.md` file.
You are permitted to use tools to write your code. You are permitted to use tools to write your code.
See [Rule 16 - Anonymous](rules.html#rule-16---anonymous). See [Rule 16 - Anonymous Judging](rules.html#rule-16-anonymous-judging).
See [Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work). See [Guidelines for Rule 7 - Original Work](guidelines.html#guideline-7---original-work).
<div id="rule8"> <div id="rule8">
## Rule 8 - Submission ## Rule 8 - Submitting requirements
</div> </div>
The Submit Server will only accept submissions from those who have The submit server will accept submissions **ONLY** from those who have
registered and only while the contest is open. registered and **ONLY** while the contest is open.
The Submit Server places a total submission size limit of **3999971** bytes. The submit server places a total size limit of **3999971** bytes **PER**
submission.
Each account has ten (**10.000**) submission slots (**0..9)**. Each submission Each account has ten (**10.000**) submission slots (**0..9)**. Each submission
slot should be annotated by the server as to whether its was received, slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify, processed, malformed, etc. Please take note of any errors, rectify,
and resubmit. In order to avoid potential packaging errors, it is **highly and resubmit. In order to avoid potential packaging errors, it is **highly
recommended** to use `mkiocccentry(1)`. recommended** to use `mkiocccentry(1)`, **AND** 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.
Do **NOT** register more than one account!
See See
[Rule 3 - Register](rules.html#rule-3---register), [Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
[Rule 15 - Building](rules.html#rule-15---building), [Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building),
and and
[Rule 17 - Packaging](rules.html#rule-17---packaging). [Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry).
<div id="rule9"> <div id="rule9">
## Rule 9 - No hands ## Rule 9 - No interactive compiling allowed
</div> </div>
Entries requiring human interaction to be initially compiled are **NOT** Entries requiring human interaction to be initially compiled are **NOT**
permitted. However, see the guidelines. Each entry **MUST** automate the permitted. However, see the guidelines. Each entry **MUST** automate the
build process using `bash`, `gmake`, `gcc`, `clang`, under a build process using `bash`, `gmake`, `gcc` and/or `clang` and other commonly
[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/). available tools under an [SUS
environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
**NOTE**: The references to `gmake(1)` can be any GNU Make compatible tool. **NOTE**: The references to `gmake(1)` can be any GNU Make compatible tool.
See [Rule 15 - Building](rules.html#rule-15---building). **NOTE**: it is better to use the `${MAKE}` variable as then one may override
the make command.
**NOTE**: it is better and more portable to **NOT** modify the `${CC}` variable
in the Makefile.
See [Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building).
<div id="rule10"> <div id="rule10">
## Rule 10 - Privileges ## Rule 10 - Program file permissions
</div> </div>
Programs that require special privileges (`setuid(2)`, `setgid(2)`, Programs that require special privileges (`setuid(2)`, `setgid(2)`,
super-user, special owner, special group, etc.) are **HIGHLY DISCOURAGED**. super-user, special owner, special group, etc.) are **HIGHLY DISCOURAGED**.
We do **NOT** guarantee these functions will behave as you expect on our We do **NOT** guarantee these functions will behave as you expect on our
test platforms. If your program needs special permissions you **MUST** test platforms. If your program needs special permissions you **MUST**
document this fact and explain why it is needed in your submission’s document this fact and explain why it is needed in your submission’s
`remarks.md` file. `remarks.md` file, preferably close to the top.
Furthermore, if you need a supplementary program that you include to Furthermore, if you need a supplementary program that you include to
have these permissions, you will also have to explain this, because these have these permissions, you will also have to explain this as well, because these
bits are **NOT** allowed in submissions and those bits will **NOT** be copied by bits are **NOT** allowed in submissions and those bits will **NOT** be copied by
`mkiocccentry(1)`. `mkiocccentry(1)`.
See [Rule 4 - Files](rules.html#rule-4---files), See [Rule 4 - Required files](rules.html#rule4-required-files),
and and
[Rule 5 - Integrity](rules.html#rule-5---integrity). [Rule 5 - Do NOT modify files](rules.html#rule5-modifying-files).
<div id="rule11"> <div id="rule11">
## Rule 11 - Abuse ## Rule 11 - Legal rule abuse
</div> </div>
Legal abuse of the rules is somewhat encouraged, but comes with risks. Legal abuse of the rules is **somewhat** encouraged, but comes with risks.
A submission that, in the opinion of the Judges, violates the rules **WILL A submission that, in the opinion of the Judges, **violates** the rules **WILL
BE DISQUALIFIED**. Submissions that plan to abuse the rules **MUST** justify BE DISQUALIFIED**. Submissions that plan to abuse the rules **MUST** justify
why their rule abuse is legal (or interesting) in the `remarks.md` file. why their rule abuse is legal (or interesting) in the `remarks.md` file.
Submission packaging abuse will **NOT** be tolerated and for this reason Submission packaging abuse will **NOT** be tolerated and for this reason,
its recommended to use `mkiocccentry(1)`. During development you can amongst many others, it is recommended that you use `mkiocccentry(1)`. During
check your `prog.c` size limits using `iocccsize(1)`, e.g., `iocccsize -v1 prog.c`. development you can check your `prog.c` size limits using `iocccsize(1)`, e.g.,
Overriding problems detected by any of the IOCCC tools `iocccsize -v1 prog.c`. Overriding problems detected by any of the IOCCC tools
risks that the submission will be rejected. risks that the submission will be rejected.
If you do submit a rule abusing or violating submission, then consider If you do submit a rule abusing or violating submission, then consider
@@ -331,22 +376,24 @@ slot that does **NOT** violate the rules in case your rule abuse excuse
is rejected. is rejected.
**IMPORTANT**: If you do submit such an alternate non-rule abusing **IMPORTANT**: If you do submit such an alternate non-rule abusing
version, please indicate that in your `remarks.md` file of your non-rule version, **PLEASE** indicate that in your `remarks.md` file of your non-rule
abusing version so that the Judges don't think you uploaded a duplicate abusing version so that the Judges don't think you uploaded a duplicate into a
into a wrong slot by mistake. wrong slot by mistake.
See [Guidelines for Rule 11 - Abuse](guidelines.html#guideline-11---abuse). See [Guidelines for Rule 11 - Legal rule
abuse](guidelines.html#guideline-11---abuse).
<div id="rule12"> <div id="rule12">
## Rule 12 - UTF-8 ## Rule 12 - UTF-8
</div> </div>
Use of UTF-8 is supported by `C89` standard and its updates and so too by the IOCCC. Use of UTF-8 is supported by `C89` standard and its updates and so too by the
IOCCC.
<div id="rule13"> <div id="rule13">
## Rule 13 - Newlines ## Rule 13 - No carriage returns in prog.c
</div> </div>
Any C source that fails to compile because lines contain carriage-returns Any C source that fails to compile because lines contain carriage-returns
@@ -357,90 +404,98 @@ CTRL+J, `\n`).
You are permitted, in order to try and squeeze your `prog.c` under a You are permitted, in order to try and squeeze your `prog.c` under a
[Rule 2a Gross Size](rules.html#rule-2a-gross-size) and/or [Rule 2a Gross Size](rules.html#rule-2a-gross-size) and/or
[Rule 2b Next Size](rules.html#rule-2b-net-size) [Rule 2b Net Size](rules.html#rule-2b-net-size)
limits, to **NOT** end source with a newline. If you limits, to **NOT** end source with a newline. If you
need to do this, please document that in your `remarks.md` file and if need to do this, please document that in your `remarks.md` file and if
your compiler complains about this, document this too and update your your compiler complains about this, document this too and update your
`Makefile` to account for this. `Makefile` to account for this.
<div id="rule14"> <div id="rule14">
## Rule 14 - Resubmit ## Rule 14 - Resubmitting lost submissions
</div> </div>
Submissions that are substantially similar to previous winning IOCCC Submissions that are substantially similar to previous winning IOCCC
entries are discouraged. entries are discouraged.
You are allowed to resubmit to a later contest, a submission that didn't You are allowed to resubmit to a later contest, a submission that didn't win the
win the IOCCC. If you do so, then you would be well advised to try and IOCCC. If you do so, then you would be **WELL ADVISED** to try and enhance and
enhance and improve your submission. If you do resubmit something that improve your submission. If you do resubmit something that didn't previously
didn't previously win, then you are encouraged to mention this in your win, then you are encouraged to mention this in your `remarks.md` file as this
`remarks.md` file as this sometimes helps. **sometimes** helps.
<div id="rule15"> <div id="rule15">
## Rule 15 - Building ## Rule 15 - GNU Makefile compatibility
</div> </div>
The `Makefile` **MUST** adhere to GNU Makefile syntax. Its recommended The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended
that you copy and rename the `Makefile.example` as a template. The primary that you copy the [Makefile.example](Makefile.example) as a template, renaming
target of the `Makefile` **MUST** be `prog` and the source file is `prog.c`. it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and
The C compiler and preprocessor **MUST** be invoked using `${CC}` and `${CPP}` the source file is `prog.c`. The C compiler and preprocessor **MUST** be
macros respectively. invoked using `${CC}` and `${CPP}` macros respectively.
The `clobber` target should clean and restore the submission directory The `clobber` target **MUST** clean and restore the submission directory tree to
tree to its original state, such as removing temporary files or any its original state, such as removing temporary files or any modified data files.
modified data files. Don't assume that `git` tool chain is installed, Don't assume that `git` tool chain is installed, i.e. do **NOT** expect `git
i.e., do **NOT** expect `git clean -f` to work. clean -f` to work. To be clear: do **NOT** use `git` to clean out files as this
can cause problems in the winner repo!
The `Makefile` **MUST** use a syntax that is compatible with The `Makefile` **MUST** use a syntax that is compatible with
`bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL= `bash(1)` and GNU `make(1)`. You are encouraged to use `SHELL=
bash` in your `Makefile`; please add a space between the `=` and bash` in your `Makefile`; please add a space between the `=` and
the value such as: the value such as:
``` <!---sh--> ``` <!---makefile-->
SHELL= bash SHELL= bash
``` ```
Assume that commands commonly found in [Single UNIX Assume that commands commonly found in [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
environments and systems are available in the search environments and systems are available in the search
`$PATH`. Avoid command options that aren't part of `$PATH`. Avoid command options that aren't part of
[SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as [SUS](https://en.wikipedia.org/wiki/Single_UNIX_Specification), such as
GNU long name options `--example` or extensions like `grep -P`. GNU long name options (such as `--example`) or extensions like `grep -P`.
Do **NOT** assume that `.` (current directory) is in the `$PATH` environment variable. Do **NOT** assume that `.` (current directory) is in the `$PATH` environment
variable.
See [Rule 4 - Files](rules.html#rule-4---files). See [Rule 4 - Required files](rules.html#rule-4---files).
See FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)". See FAQ on "[What are the detailed recommendations for a submission Makefile?](../faq.html#makefile_details)".
See [Guidelines for Rule 15 - Building](guidelines.html#guideline-15---building). See [Guidelines for Rule 15 - GNU Makefile compatibility](guidelines.html#guideline-15---building).
<div id="rule16"> <div id="rule16">
## Rule 16 - Anonymous ## Rule 16 - Anonymous judging
</div> </div>
Your source code, data files, remarks, and program output **MUST NOT** Your source code, data files, remarks, and program output **MUST NOT**
identify the author(s) of your code (unless you are **Peter Honeyman** identify the author(s) of your code (unless you are **Peter Honeyman**
or pretending to be **Peter Honeyman**). In order to be impartial the or pretending to be **Peter Honeyman**). In order to be impartial the
[Judges](https://www.ioccc.org/judges.html) do **NOT** know who is submitting [Judges](https://www.ioccc.org/judges.html) do **NOT** know who is submitting
entries to the IOCCC until final selection is made. Even if you are programs to the IOCCC until final selection is made, and **only** submissions
a past winner, you **MUST NOT** reveal your identity deliberately or by that won.
accident anywhere in your submission. ***Failure to comply may result
in the submission being disqualified.*** Even if you are a past winner, you **MUST NOT** reveal your identity
deliberately or by accident anywhere in your submission. **_Failure to comply
may result in the submission being disqualified_**.
<div id="rule17"> <div id="rule17">
## Rule 17 - Packaging <div id="rule17-mkiocccentry">
## Rule 17 - Use `mkiocccentry`
</div> </div>
</div>
TL;DR: use `mkiocccentry(1)` to package your submission.
The files, directories, and paths **MUST** conform to the limits imposed by The files, directories, and paths **MUST** conform to the limits imposed by
`mkiocccentry(1)`, including but **NOT** limited, to their names, count, path `mkiocccentry(1)`, including but **NOT** limited, to their names, count, path
length, directory tree depth, and permissions. length, directory tree depth, and permissions.
The submission tree may have at most **13** directories and maximum The submission tree may have at most **13** directories and maximum
directory depths of **4**. The maximum number of files, excluding directory depths of **4**. The maximum number of files, excluding
`prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`, `try.alt.sh`, `prog.c`, `remarks.md`, `Makefile`, `prog.alt.c`, `try.sh`, `try.alt.sh`,
`.info.json` and `.auth.json` is **31**. And the maximum file-path `.info.json` and `.auth.json` is **31**. And the maximum file-path
component is **38** and maximum path length is **60**. component is **38** and maximum path length is **60**.
@@ -448,47 +503,51 @@ component is **38** and maximum path length is **60**.
The submission **MUST** be a `.txz` compressed tarball (i.e., tarball compressed by `xz(1)`) The submission **MUST** be a `.txz` compressed tarball (i.e., tarball compressed by `xz(1)`)
as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size. as constructed by `mkiocccentry(1)`, which **MUST** be within **[1..3999971]** bytes in size.
The tarball **MUST** be a **v7 format** tarball. The tarball **MUST** be a **v7 format** tarball, and any supplementary tarballs
you provide **MUST** also be **v7 format**.
The sum of all file lengths, after unpacking from the tarball, **MUST** be The sum of all file lengths, after unpacking from the tarball, **MUST** be
less than `27651*1024` (**28314624**) bytes. less than `27651*1024` (**28314624**) bytes.
The submission **MUST** be a tarball file that **MUST** pass all `txzchk(1)` checks, and the tarball The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename
filename **MUST** pass all `fnamchk(1)` checks. **MUST** pass all `fnamchk(1)` checks as well.
You may **NOT** submit a tarball created by the `-d`, `-e`, **NOR** by the `-s seed` options of `mkiocccentry(1)`. You may **NOT** submit a tarball created by the `-d`, `-e` **OR** by the `-s
seed` options of `mkiocccentry(1)`.
The unpacked submission directory **MUST** pass the checks performed by the The unpacked submission directory **MUST** pass the checks performed by the
current version of `chksubmit(1)`. minimum required version of `chksubmit(1)`.
Submissions may **NOT** use a Submissions may **NOT** use a [mkiocccentry
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) toolkit](https://github.com/ioccc-src/mkiocccentry) command line options that
command line options that labeled as "**for TESTING purposes**", are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by
**NOR** labeled as "**for the use by the IOCCC judges only**", the IOCCC judges only**", in their respective man pages.
in their respective man pages.
Submissions may **ONLY** use Submissions may **ONLY** use [mkiocccentry
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that confirm
command lines that confirm to the command's `-h` "_print help message_". to the command's `-h` "_print help message_", again notwithstanding the options
for testing and the IOCCC judges.
The `prog.c` file **MUST** pass the [Rule 2 - Size](rules.html#rule-2---size) The `prog.c` file **MUST** pass the [Rule 2 - Size](rules.html#rule-2---size)
size checks performed by `iocccsize(1)`. checks performed by `iocccsize(1)`.
The `.auth.json` and `.info.json` files **MUST** be compatible with what `chksubmit(1)` generates. The `.auth.json` and `.info.json` files **MUST** be compatible with what
`mkiocccentry(1)` generates.
Any submission that fails to pass the checks performed by the most recent version of the Any submission that fails to pass the checks performed by the minimum required
[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry) version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**WILL be rejected**! **WILL be rejected**!
See [Rule 4 - Files](rules.html#rule-4---files). See [Rule 4 - Required files](rules.html#rule4-required-files).
See FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)". See the
FAQ on "[What is the mkiocccentry tool, how do I obtain it and how do I use it?](../faq.html#mkiocccentry)".
See [Guidelines for Rule 17 - Packaging](guidelines.html#guideline-17---packaging). See the [Guidelines for Rule 17 - Use mkiocccentry](guidelines.html#guideline-17---packaging).
<div id="rule18"> <div id="rule18">
## Rule 18 - License ## Rule 18 - Submission license
</div> </div>
The entirety of your submission **MUST** be submitted under the following license: The entirety of your submission **MUST** be submitted under the following license:
@@ -506,7 +565,7 @@ This 19th rule, while prime, is reserved for future abuse 😁.
Additional rules, both humorous and otherwise, may be added Additional rules, both humorous and otherwise, may be added
below this rule in future contests. below this rule in future contests.
See [Rule 6 - Free](rules.html#rule-6---free). See [Rule 6 - Free Rule](rules.html#rule6-free).
## Further Reading ## Further Reading