From 87d8c627a08870ad9c476c749eedaad754568299 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sat, 29 Nov 2025 06:14:01 -0800 Subject: [PATCH] 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. --- next/rules.html | 315 ++++++++++++++++++++++++------------------- next/rules.md | 347 ++++++++++++++++++++++++++++-------------------- 2 files changed, 383 insertions(+), 279 deletions(-) diff --git a/next/rules.html b/next/rules.html index 7af92541f..5ec93b720 100644 --- a/next/rules.html +++ b/next/rules.html @@ -460,9 +460,9 @@ IOCCC in the past.
These rules are a TENTATIVE proposal for the next IOCCC and are likely be to be updated before the next IOCCC.
See our -FAQ on “rules, guidelines, tools feedback” +FAQ on “rules, guidelines and tools feedback” as well as our -FAQ on “about asking questions” +FAQ on “asking questions” about these rules. You might also find the FAQ in general useful, especially the FAQ on “how to enter the IOCCC”.
Watch both the IOCCC status page and the @@ -474,14 +474,14 @@ app from time to time to view IOCCC mastodon updates.
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 granted provided this copyright and notice are included in its entirety and remains unaltered. All other uses MUST receive prior permission in writing by contacting the judges.
These IOCCC Rules are version 29.08 2025-11-28.
-Be sure to read the IOCCC guidelines.
+These IOCCC Rules are version 29.09 2025-11-29.
+Reminder: be SURE to read the IOCCC guidelines.
Until the contest enters the open state, any or all 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.
-See Current status of the IOCCC.
+See the current status of the IOCCC.
Your submission MUST be a C program.
+Your submission MUST be a C program that does NOT #include data files.
Rule 2 requires that your submission satisfy BOTH
-Rule 2a Gross Size
+Rule 2a &lparen;Gross Size&rparen;
and
-Rule 2b Next Size.
+Rule 2b &lparen;Net Size&rparen;.
During development this can be checked using iocccsize(1):
iocccsize prog.c
-See Guidelines for Rule 2 - Size.
+ iocccsize prog.c
+See the Guidelines for Rule 2 - Size restrictions.
The overall maximum size of your prog.c program source MUST NOT
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.
iocccsize(1)), the value printed MUST
NOT exceed 2503.
+NOTE: iocccsize does NOT calculate the filename length. See Rule 17 -
+Use mkiocccentry.
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 temporary password, which you MUST change within 14 days. If you fail to change it in a timely manner, you’ll need to @@ -538,38 +544,53 @@ register and submit your entries; DO NOT WAIT UNTIL THE FINAL DAYSNOT responsible for delayed or lost 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.
-See Rule 8 - Submission.
-See Guidelines for Rule 3 - Register.
+See Rule 8 - Submitting requirements.
+See Guidelines for Rule 3 - Registering for the IOCCC.
The submission MUST include at least these files: Makefile, prog.c,
-remarks.md,.info.json, and .auth.json.
At a minimum the following requirements apply. Additional requirements +
Your submission MUST include at least these files: Makefile, prog.c,
+remarks.md,.info.json, and .auth.json, the latter two of which are
+generated by mkiocccentry(1). See Rule 17 -
+Use mkiocccentry.
At a minimum the following requirements apply. Additional requirements
may be imposed by mkiocccentry(1) updates that have yet to be listed
-here:
NOTE: mkiocccentry(1) will reject any directory which has prohibited
+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, and MUST pass the chksubmit(1) tests.
.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.
The Makefile, remarks.md,.info.json, and .auth.json MUST
-have a file size greater than 0.
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
compiles your code, the executable (if applicable) MUST be called prog.
-The Makefile may compile your source code into other filenames as well.
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
-Makefile, your submission MUST NOT include those files in
-your top directory, as original content.
Makefile, your submission MUST NOT include those files in your top
+directory.
Your submission may NOT have any file that starts with COPYING,
COPYRIGHT, or LICENSE as those files are reserved by IOCCC.
Your submission may NOT have in the top directory, prog.orig.c,
-README.md, nor index.html as those files reserved by IOCCC.
Your submission may NOT have in the top directory, any file +
Your submission may NOT have in the top directory: prog.orig.c,
+README.md or index.html as those files are reserved by the IOCCC.
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
as those files are reserved by IOCCC.
Your submission may ONLY contain files and directories. Other file -types such as symlinks, sockets, etc are NOT allowed.
All directories MUST have a file mode of 0755. All files -MUST have the file mode of 0444, except for files that +types such as symlinks, sockets etc. are NOT allowed.
All directories MUST have permission mode of 0755. All files
+MUST have the file mode of 0444, EXCEPT for files that
end in .sh which must have a mode of 0555.
All files that end in .md MUST be in markdown format.
We recommend that markdown files observe our
@@ -582,29 +603,34 @@ a case insensitive filesystem.
The remarks.md and Makefile are explained in more detail in the Guidelines.
See IOCCC markdown guidelines.
-See Rule 17 - Packaging.
-See FAQ on “What permissions may my files be and what if I need different permissions?”.
-See Guidelines for the mkiocccentry toolkit.
-See Guidelines for the Makefile.
+See Rule 17 - Use mkiocccentry.
+See the +FAQ on “What permissions may my files be and what if I need different permissions?”.
+See the Guidelines on the mkiocccentry toolkit.
+See the Guidelines on the Makefile.
Your submission MUST NOT modify the filenames or content of any of
-your original submission, such as prog.c, Makefile, or any supplied
-data files. To modify files, your program can make a copy or you can
-use the Makefile to setup working copies. Any working copies MUST be
-cleaned up by the Makefile clobber target, so as to restore the
-directory to its original state.
Your submission MUST NOT modify the filenames or content of any of your
+original submission, such as prog.c, Makefile, or ANY other supplied
+files. To modify files, your program can make a copy or you can use the
+Makefile to setup working copies. Any working copies MUST be cleaned up
+by the Makefile clobber target, so as to restore the directory to its
+original state.
Your submission MUST NOT create or modify directories and files
-ABOVE the current directory with the exception of the /tmp and the
-/var/tmp directories as long as the directory name or filename does
-NOT start with “.” (dot).
The Makefile clobber target MUST be restore your submission into
+ABOVE the current directory (with the exception of the /tmp and the /var/tmp
+directories and as long as the directory name or filename does NOT start
+with a . (dot)).
The Makefile clobber target MUST restore your submission to its
original form, including the removal of any created files and directories.
Your code should be able to run under a SUS environment.
I am NOT a Rule, I am a free(void *human); ‼️
while (!(ioccc(rule(you(are(number(6)))))) {
@@ -614,82 +640,93 @@ original form, including the removal of any created files and directories.
Rule 7 - Original Work
-You, the author(s), MUST own the contents of your submission, or you MUST
-have permission from the original owner(s) to its use. If you submit
-any content that is owned by others, you MUST detail that ownership,
-i.e., who owns what, and document the permission you obtained from them
-in your remarks.md file.
+You, the author(s), MUST own the contents of your submission, OR, IF you
+do NOT own the work, then you MUST have permission from the original
+owner(s) to its use. If you submit ANY content that is owned by others, you
+MUST detail that ownership, i.e., who owns what, and document the permission
+you obtained from them in your remarks.md file.
You are permitted to use tools to write your code.
-See Rule 16 - Anonymous.
+See Rule 16 - Anonymous Judging.
See Guidelines for Rule 7 - Original Work.
-Rule 8 - Submission
+Rule 8 - Submitting requirements
-The Submit Server will only accept submissions from those who have
-registered and only while the contest is open.
-The Submit Server places a total submission size limit of 3999971 bytes.
+The submit server will accept submissions ONLY from those who have
+registered and ONLY while the contest is open.
+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
slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify,
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
-Rule 3 - Register,
-Rule 15 - Building,
+Rule 3 - Registering for the IOCCC,
+Rule 15 - GNU Makefile compatibility,
and
-Rule 17 - Packaging.
+Rule 17 - Use mkiocccentry.
-Rule 9 - No hands
+Rule 9 - No interactive compiling allowed
Entries requiring human interaction to be initially compiled are NOT
permitted. However, see the guidelines. Each entry MUST automate the
-build process using bash, gmake, gcc, clang, under a
-SUS environment.
+build process using bash, gmake, gcc and/or clang and other commonly
+available tools under an SUS
+environment.
NOTE: The references to gmake(1) can be any GNU Make compatible tool.
-See 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.
-Rule 10 - Privileges
+Rule 10 - Program file permissions
Programs that require special privileges (setuid(2), setgid(2),
super-user, special owner, special group, etc.) are HIGHLY DISCOURAGED.
We do NOT guarantee these functions will behave as you expect on our
test platforms. If your program needs special permissions you MUST
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
-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
mkiocccentry(1).
-See Rule 4 - Files,
+
See Rule 4 - Required files,
and
-Rule 5 - Integrity.
+Rule 5 - Do NOT modify files.
-Rule 11 - Abuse
+Rule 11 - Legal rule abuse
-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
+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
BE DISQUALIFIED. Submissions that plan to abuse the rules MUST justify
why their rule abuse is legal (or interesting) in the remarks.md file.
-Submission packaging abuse will NOT be tolerated and for this reason
-its recommended to use mkiocccentry(1). During development you can
-check your prog.c size limits using iocccsize(1), e.g., iocccsize -v1 prog.c.
-Overriding problems detected by any of the IOCCC tools
+
Submission packaging abuse will NOT be tolerated and for this reason,
+amongst many others, it is recommended that you use mkiocccentry(1). During
+development you can check your prog.c size limits using iocccsize(1), e.g.,
+iocccsize -v1 prog.c. Overriding problems detected by any of the IOCCC tools
risks that the submission will be rejected.
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 NOT violate the rules in case your rule abuse excuse
is rejected.
IMPORTANT: If you do submit such an alternate non-rule abusing
-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
-into a wrong slot by mistake.
-See Guidelines for Rule 11 - Abuse.
+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 into a
+wrong slot by mistake.
+See Guidelines for Rule 11 - Legal rule
+abuse.
Rule 12 - UTF-8
-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.
-Rule 13 - Newlines
+Rule 13 - No carriage returns in prog.c
Any C source that fails to compile because lines contain carriage-returns
(CTRL+M, \r) in particular as part of DOS/Windows style newlines might
@@ -698,33 +735,33 @@ or remarks.md files, but instead end lines with Unix newline (line-
CTRL+J, \n).
You are permitted, in order to try and squeeze your prog.c under a
Rule 2a Gross Size and/or
-Rule 2b Next Size
+Rule 2b Net Size
limits, to NOT end source with a newline. If you
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
Makefile to account for this.
-Rule 14 - Resubmit
+Rule 14 - Resubmitting lost submissions
Submissions that are substantially similar to previous winning IOCCC
entries are discouraged.
-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 well advised 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
-remarks.md file as this sometimes helps.
+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 WELL ADVISED 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 remarks.md file as this
+sometimes helps.
-Rule 15 - Building
+Rule 15 - GNU Makefile compatibility
-The Makefile MUST adhere to GNU Makefile syntax. Its recommended
-that you copy and rename the Makefile.example as a template. The primary
-target of the Makefile MUST be prog and the source file is prog.c.
-The C compiler and preprocessor MUST be invoked using ${CC} and ${CPP}
-macros respectively.
-The clobber target should 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 git tool chain is installed,
-i.e., do NOT expect git clean -f to work.
+The Makefile MUST adhere to GNU Makefile syntax. It’s highly recommended
+that you copy the Makefile.example as a template, renaming
+it to Makefile. The primary target of the Makefile MUST be prog and
+the source file is prog.c. The C compiler and preprocessor MUST be
+invoked using ${CC} and ${CPP} macros respectively.
+The clobber target MUST 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 git tool chain is installed, i.e. do NOT expect git 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
bash(1) and GNU make(1). You are encouraged to use SHELL= bash in your Makefile; please add a space between the = and
the value such as:
@@ -734,25 +771,30 @@ Specification
environments and systems are available in the search
$PATH. Avoid command options that aren’t part of
SUS, such as
-GNU long name options --example or extensions like grep -P.
-Do NOT assume that . (current directory) is in the $PATH environment variable.
-See Rule 4 - Files.
+GNU long name options (such as --example) or extensions like grep -P.
+Do NOT assume that . (current directory) is in the $PATH environment
+variable.
+
See FAQ on “What are the detailed recommendations for a submission Makefile?”.
-See Guidelines for Rule 15 - Building.
+See Guidelines for Rule 15 - GNU Makefile compatibility.
-Rule 16 - Anonymous
+Rule 16 - Anonymous judging
Your source code, data files, remarks, and program output MUST NOT
identify the author(s) of your code (unless you are Peter Honeyman
or pretending to be Peter Honeyman). In order to be impartial the
Judges do NOT know who is submitting
-entries to the IOCCC until final selection is made. 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.
+programs to the IOCCC until final selection is made, and only submissions
+that won.
+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.
-Rule 17 - Packaging
+
+Rule 17 - Use mkiocccentry
+
+TL;DR: use mkiocccentry(1) to package your submission.
The files, directories, and paths MUST conform to the limits imposed by
mkiocccentry(1), including but NOT limited, to their names, count, path
length, directory tree depth, and permissions.
@@ -763,33 +805,36 @@ directory depths of 4. The maximum number of files, excluding
component is 38 and maximum path length is 60.
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.
-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
less than 27651*1024 (28314624) bytes.
-The submission MUST be a tarball file that MUST pass all txzchk(1) checks, and the tarball
-filename MUST pass all fnamchk(1) checks.
-You may NOT submit a tarball created by the -d, -e, NOR by the -s seed options of mkiocccentry(1).
+The submission MUST pass all txzchk(1) checks, and the tarball filename
+MUST pass all fnamchk(1) checks as well.
+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
-current version of chksubmit(1).
-Submissions may NOT use a
-mkiocccentry toolkit
-command line options that labeled as “for TESTING purposes”,
-NOR labeled as “for the use by the IOCCC judges only”,
-in their respective man pages.
-Submissions may ONLY use
-mkiocccentry toolkit
-command lines that confirm to the command’s -h “print help message”.
+minimum required version of chksubmit(1).
+Submissions may NOT use a mkiocccentry
+toolkit command line options that
+are labelled as “for TESTING purposes”, OR labelled as “for the use by
+the IOCCC judges only”, in their respective man pages.
+Submissions may ONLY use mkiocccentry
+toolkit command lines that confirm
+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
-size checks performed by iocccsize(1).
-The .auth.json and .info.json files MUST be compatible with what chksubmit(1) generates.
-Any submission that fails to pass the checks performed by the most recent version of the
-mkiocccentry toolkit
+checks performed by iocccsize(1).
+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 minimum required
+version of the mkiocccentry toolkit
WILL be rejected!
-See Rule 4 - Files.
-See FAQ on “What is the mkiocccentry tool, how do I obtain it and how do I use it?”.
-See Guidelines for Rule 17 - Packaging.
+
+See the
+FAQ on “What is the mkiocccentry tool, how do I obtain it and how do I use it?”.
+See the Guidelines for Rule 17 - Use mkiocccentry.
-Rule 18 - License
+Rule 18 - Submission license
The entirety of your submission MUST be submitted under the following license:
CC BY-SA 4.0 DEED Attribution-ShareAlike 4.0 International
@@ -800,7 +845,7 @@ size checks performed by iocccsize(1).
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.
-See Rule 6 - Free.
+See Rule 6 - Free Rule.
Further Reading
Please read the Guidelines next for further commentary on these rules.
Read the
diff --git a/next/rules.md b/next/rules.md
index 4ed0bc1eb..78bdc8426 100644
--- a/next/rules.md
+++ b/next/rules.md
@@ -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.
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
-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
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
-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
granted provided this copyright and notice are included in its entirety
@@ -39,9 +39,9 @@ writing by [contacting the judges](../contact.html).
## 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).
@@ -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.
-See [Current status of the IOCCC](../status.html).
+See the [current status of the IOCCC](../status.html).
-## Rule 1 - Program
+## Rule 1 - C program
-Your submission **MUST** be a C program.
+Your submission **MUST** be a C program that does NOT `#include` data files.
-## Rule 2 - Size
+## Rule 2 - Size restrictions
`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
-[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)`:
+```
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).
@@ -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**
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).
@@ -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
NOT** exceed **2503**.
+**NOTE**: `iocccsize` does **NOT** calculate the filename length. See [Rule 17 -
+Use mkiocccentry](#rule17-mkiocccentry).
+
-## Rule 3 - Register
+
+## Rule 3 - You must register to enter the contest
+
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
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 [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).
-## Rule 4 - Files
+
+## Rule 4 - Required files
+
-The submission **MUST** include at least these files: `Makefile`, `prog.c`,
-`remarks.md`,`.info.json`, and `.auth.json`.
+Your submission **MUST** include at least these files: `Makefile`, `prog.c`,
+`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
-here:
+below.
-* `.info.json`, and `.auth.json` **MUST** be generated by `mkiocccenty(1)`
-when packing a submission, and **MUST** pass the `chksubmit(1)` tests.
+**NOTE**: `mkiocccentry(1)` will reject any directory which has prohibited
+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**
-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`.
-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
-`Makefile`, your submission **MUST NOT** include those files in
-your top directory, as original content.
+`Makefile`, your submission **MUST NOT** include those files in your **top**
+directory.
* Your submission may **NOT** have any file that starts with `COPYING`,
`COPYRIGHT`, or `LICENSE` as those files are reserved by IOCCC.
-* Your submission may **NOT** have in the top directory, `prog.orig.c`,
-`README.md`, nor `index.html` as those files reserved by IOCCC.
+* Your submission may **NOT** have in the **top** directory: `prog.orig.c`,
+`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`
as those files are reserved by IOCCC.
* 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
-**MUST** have the file mode of **0444**, except for files that
+* **All** directories **MUST** have permission mode of **0755**. All files
+**MUST** have the file mode of **0444**, EXCEPT for files that
end in `.sh` which must have a mode of **0555**.
* 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 [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).
-## Rule 5 - Integrity
+
+## Rule 5 - Do NOT modify submitted files or filenames or parent directories
+
-Your submission **MUST NOT** modify the filenames or content of any of
-your original submission, such as `prog.c`, `Makefile`, or any supplied
-data files. To modify files, your program can make a copy or you can
-use the `Makefile` to setup working copies. Any working copies **MUST** be
-cleaned up by the `Makefile` `clobber` target, so as to restore the
-directory to its original state.
+Your submission **MUST NOT** modify the filenames or content of any of your
+original submission, such as `prog.c`, `Makefile`, or **ANY** other supplied
+files. To modify files, your program can make a copy or you can use the
+`Makefile` to setup working copies. Any working copies **MUST** be cleaned up
+by the `Makefile` `clobber` target, so as to restore the directory to its
+original state.
Your submission **MUST NOT** create or modify directories and files
-ABOVE the current directory with the exception of the `/tmp` and the
-`/var/tmp` directories as long as the directory name or filename does
-**NOT** start with "." (dot).
+ABOVE the current directory (with the exception of the `/tmp` and the `/var/tmp`
+directories and as long as the directory name or filename does **NOT** start
+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.
Your code should be able to run under a
@@ -223,7 +254,9 @@ Your code should be able to run under a
-## Rule 6 - Free
+
+## Rule 6 - Free Rule
+
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
-You, the author(s), **MUST** own the contents of your submission, or you **MUST**
-have permission from the original owner(s) to its use. If you submit
-any content that is owned by others, you **MUST** detail that ownership,
-i.e., who owns what, and document the permission you obtained from them
-in your `remarks.md` file.
+You, the author(s), **MUST** own the contents of your submission, **OR**, IF you
+do **NOT** own the work, then you **MUST** have permission from the original
+owner(s) to its use. If you submit **ANY** content that is owned by others, you
+**MUST** detail that ownership, i.e., who owns what, and document the permission
+you obtained from them in your `remarks.md` file.
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).
-## Rule 8 - Submission
+## Rule 8 - Submitting requirements
-The Submit Server will only accept submissions from those who have
-registered and only while the contest is open.
+The submit server will accept submissions **ONLY** from those who have
+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
slot should be annotated by the server as to whether its was received,
processed, malformed, etc. Please take note of any errors, rectify,
-and resubmit. In order to avoid potential packaging errors, it is **highly
-recommended** to use `mkiocccentry(1)`.
+and resubmit. In order to avoid potential packaging errors, it is **highly
+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
-[Rule 3 - Register](rules.html#rule-3---register),
-[Rule 15 - Building](rules.html#rule-15---building),
+[Rule 3 - Registering for the IOCCC](rules.html#rule3-register),
+[Rule 15 - GNU Makefile compatibility](rules.html#rule-15---building),
and
-[Rule 17 - Packaging](rules.html#rule-17---packaging).
+[Rule 17 - Use mkiocccentry](rules.html#rule-17-mkiocccentry).
-## Rule 9 - No hands
+## Rule 9 - No interactive compiling allowed
Entries requiring human interaction to be initially compiled are **NOT**
-permitted. However, see the guidelines. Each entry **MUST** automate the
-build process using `bash`, `gmake`, `gcc`, `clang`, under a
-[SUS environment](https://pubs.opengroup.org/onlinepubs/9799919799/).
+permitted. However, see the guidelines. Each entry **MUST** automate the
+build process using `bash`, `gmake`, `gcc` and/or `clang` and other commonly
+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.
-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).
-## Rule 10 - Privileges
+## Rule 10 - Program file permissions
Programs that require special privileges (`setuid(2)`, `setgid(2)`,
super-user, special owner, special group, etc.) are **HIGHLY DISCOURAGED**.
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
-`remarks.md` file.
+`remarks.md` file, preferably close to the top.
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
`mkiocccentry(1)`.
-See [Rule 4 - Files](rules.html#rule-4---files),
+See [Rule 4 - Required files](rules.html#rule4-required-files),
and
-[Rule 5 - Integrity](rules.html#rule-5---integrity).
+[Rule 5 - Do NOT modify files](rules.html#rule5-modifying-files).
-## Rule 11 - Abuse
+## Rule 11 - Legal rule abuse
-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
+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
BE DISQUALIFIED**. Submissions that plan to abuse the rules **MUST** justify
why their rule abuse is legal (or interesting) in the `remarks.md` file.
-Submission packaging abuse will **NOT** be tolerated and for this reason
-its recommended to use `mkiocccentry(1)`. During development you can
-check your `prog.c` size limits using `iocccsize(1)`, e.g., `iocccsize -v1 prog.c`.
-Overriding problems detected by any of the IOCCC tools
+Submission packaging abuse will **NOT** be tolerated and for this reason,
+amongst many others, it is recommended that you use `mkiocccentry(1)`. During
+development you can check your `prog.c` size limits using `iocccsize(1)`, e.g.,
+`iocccsize -v1 prog.c`. Overriding problems detected by any of the IOCCC tools
risks that the submission will be rejected.
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.
**IMPORTANT**: If you do submit such an alternate non-rule abusing
-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
-into a wrong slot by mistake.
+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 into a
+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).
## Rule 12 - UTF-8
-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.
-## Rule 13 - Newlines
+## Rule 13 - No carriage returns in prog.c
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
[Rule 2a Gross Size](rules.html#rule-2a-gross-size) and/or
-[Rule 2b Next Size](rules.html#rule-2b-net-size)
-limits, to **NOT** end source with a newline. If you
+[Rule 2b Net Size](rules.html#rule-2b-net-size)
+limits, to **NOT** end source with a newline. If you
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
`Makefile` to account for this.
-## Rule 14 - Resubmit
+## Rule 14 - Resubmitting lost submissions
Submissions that are substantially similar to previous winning IOCCC
entries are discouraged.
-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 well advised 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
-`remarks.md` file as this sometimes helps.
+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 **WELL ADVISED** 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 `remarks.md` file as this
+**sometimes** helps.
-## Rule 15 - Building
+## Rule 15 - GNU Makefile compatibility
-The `Makefile` **MUST** adhere to GNU Makefile syntax. Its recommended
-that you copy and rename the `Makefile.example` as a template. The primary
-target of the `Makefile` **MUST** be `prog` and the source file is `prog.c`.
-The C compiler and preprocessor **MUST** be invoked using `${CC}` and `${CPP}`
-macros respectively.
+The `Makefile` **MUST** adhere to GNU Makefile syntax. It's highly recommended
+that you copy the [Makefile.example](Makefile.example) as a template, renaming
+it to `Makefile`. The primary target of the `Makefile` **MUST** be `prog` and
+the source file is `prog.c`. The C compiler and preprocessor **MUST** be
+invoked using `${CC}` and `${CPP}` macros respectively.
-The `clobber` target should 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 `git` tool chain is installed,
-i.e., do **NOT** expect `git clean -f` to work.
+The `clobber` target **MUST** 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 `git` tool chain is installed, i.e. do **NOT** expect `git
+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
-`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
the value such as:
-```
+```
SHELL= bash
```
Assume that commands commonly found in [Single UNIX
Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification)
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
-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 [Guidelines for Rule 15 - Building](guidelines.html#guideline-15---building).
+See [Guidelines for Rule 15 - GNU Makefile compatibility](guidelines.html#guideline-15---building).
-## Rule 16 - Anonymous
+## Rule 16 - Anonymous judging
Your source code, data files, remarks, and program output **MUST NOT**
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
-entries to the IOCCC until final selection is made. 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.***
+programs to the IOCCC until final selection is made, and **only** submissions
+that won.
+
+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_**.
-## Rule 17 - Packaging
+
+## Rule 17 - Use `mkiocccentry`
+
+
+TL;DR: use `mkiocccentry(1)` to package your submission.
The files, directories, and paths **MUST** conform to the limits imposed by
`mkiocccentry(1)`, including but **NOT** limited, to their names, count, path
length, directory tree depth, and permissions.
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`,
`.info.json` and `.auth.json` is **31**. And the maximum file-path
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)`)
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
less than `27651*1024` (**28314624**) bytes.
-The submission **MUST** be a tarball file that **MUST** pass all `txzchk(1)` checks, and the tarball
-filename **MUST** pass all `fnamchk(1)` checks.
+The submission **MUST** pass all `txzchk(1)` checks, and the tarball filename
+**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
-current version of `chksubmit(1)`.
+minimum required version of `chksubmit(1)`.
-Submissions may **NOT** use a
-[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
-command line options that labeled as "**for TESTING purposes**",
-**NOR** labeled as "**for the use by the IOCCC judges only**",
-in their respective man pages.
+Submissions may **NOT** use a [mkiocccentry
+toolkit](https://github.com/ioccc-src/mkiocccentry) command line options that
+are labelled as "**for TESTING purposes**", **OR** labelled as "**for the use by
+the IOCCC judges only**", in their respective man pages.
-Submissions may **ONLY** use
-[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
-command lines that confirm to the command's `-h` "_print help message_".
+Submissions may **ONLY** use [mkiocccentry
+toolkit](https://github.com/ioccc-src/mkiocccentry) command lines that confirm
+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)
-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
-[mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
+Any submission that fails to pass the checks performed by the minimum required
+version of the [mkiocccentry toolkit](https://github.com/ioccc-src/mkiocccentry)
**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).
-## Rule 18 - License
+## Rule 18 - Submission 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
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