{"id":24009545,"url":"https://github.com/binarymelodies/oldexecutableformats","last_synced_at":"2025-02-25T13:30:05.381Z","repository":{"id":269555942,"uuid":"906205685","full_name":"BinaryMelodies/OldExecutableFormats","owner":"BinaryMelodies","description":"Documenting old executable formats","archived":false,"fork":false,"pushed_at":"2025-02-03T12:19:34.000Z","size":343,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T12:41:04.650Z","etag":null,"topics":["executable-format","history-of-computing"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BinaryMelodies.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-20T11:39:42.000Z","updated_at":"2025-02-03T12:19:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"e66faaf1-f1f7-4d7d-90fc-53ce4ac4dec7","html_url":"https://github.com/BinaryMelodies/OldExecutableFormats","commit_stats":null,"previous_names":["binarymelodies/oldexecutableformats"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryMelodies%2FOldExecutableFormats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryMelodies%2FOldExecutableFormats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryMelodies%2FOldExecutableFormats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BinaryMelodies%2FOldExecutableFormats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BinaryMelodies","download_url":"https://codeload.github.com/BinaryMelodies/OldExecutableFormats/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240676020,"owners_count":19839445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["executable-format","history-of-computing"],"created_at":"2025-01-08T03:59:59.276Z","updated_at":"2025-02-25T13:30:05.302Z","avatar_url":"https://github.com/BinaryMelodies.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Documenting old computer executable formats\n\nThis project is an on-going attempt to collect as much information as possible on several old executable file formats.\nThe focus has mostly revolved around old UNIXen, DOS-like systems and related operating systems, as well as 16-bit home computers.\n\nMost of this information is available online, scattered in different locations, but this file also includes information on more obscure and obsolete sources and formats, and in general information that often gets left out from the most up to date documentations.\nThis document also attempts to provide a diachronic overview, focusing on which versions introduced which entries or features, instead of just presenting the latest versions of each file format.\nThe author has strived for completeness and preservation of as much information as possible.\n\nWhen possible, the runtime memory layout is also mentioned.\n\n[The current up to date version is accessible via this link](https://binarymelodies.github.io/OldExecutableFormats/).\n\n# HTML Generation\n\nThe repository already contains a generated HTML file, however it is possible to rerun the generation if needed.\nTo generate the documentation in the HTML format, you will need to run the following command:\n\n    python3 generate.py execfmt.dat\n\nThis will create the HTML file called `execfmt.html`.\n\n# Notes on the database file format\n\nThe database file execfmt.dat is stored in an ad-hoc format created specifically to store information about file formats.\nIt is ultimately undocumented and its semantics are defined by the script `generate.py`, as it evolved together with the database itself.\nIn order to make reading and extending easier, here are a few pieces of information on the file format.\nBeware that if `generate.py` gets updated, this description might become out of date, so consider it only as a general guide.\n\nThe database is divided into two parts, the first part listing the file formats and their general properties, the second part giving the more detailed structure of each file format.\nThe two parts are separated by a line containing only `DESCRIPTIONS`.\nLines starting with the pound/hash mark symbol `#` are ignored.\nWhen generating the HTML files, the first part is used to create a short overview at the top of each section for each file format, with the second part providing the contents.\n\nThe first part of the database includes information such as the file format name, year of first public appearance, what systems or architectures it runs on, and when was their support introduced or dropped.\nIt follows a very simple `.tag:value` format, where `.tag` (always starts with a period) specifies the type of the information and `value` describing the information itself.\nThe tags have a specific hierarchy to them, with `.fmt` starting a new file format description, and `.sys` introducing a new set of properties specific to that system.\nFormats themselves can be organized in the documentation in a hierarchy (for example, Classic Mac OS binaries are stored inside Macintosh Resources, which when stored on a non-Macintosh file system is then stored inside an AppleSingle/AppleDouble container, so the documentation of the AppleSingle/AppleDouble file format is grouped under the Macintosh Resource file format).\nThe database also contains more speculative information.\nFor example, since the exact timeline of support can not always be established with the available information, fields such as `sys_date_earliest` and `sys_date_latest` provide the boundary dates between which the file format could have appeared.\nThe file format influences are rarely mentioned in the available documentation and the entries are based on educated guesses by the author.\n\nThe second part of the database contains the detailed descriptions for each file format.\nIt is organized as a sequence of tables, commands and paragraphs.\nCommands (such as `TITLE`, `SECTION`, `REFERENCE`) provide the organization of each format.\nThe `TITLE` command introduces the file format, while `SECTION` introduces a new subsection in the HTML file.\nBoth of these take two arguments separated by a colon `:`, the first argument giving a keyword, the second argument the name, as it is to appear in the generated HTML file.\nFor the `TITLE` command, the keyword must match the name of the format provided in the first half of the file.\nFurthermore, `SECTION` commands can be nested, inner sections taking a prefix separated by a slash character `/` indicating the level (1 being the second highest, with increasing numbers providing successive levels of subsections).\n\nTables usually describe the structure of each part of the file format.\nTables can also be nested inside each other.\nEach subtable appears inside the last row, the first level of subtable has to be introduced with two tabulation characters as indentation, and every further one indented with a single tabulation character more.\n\nParagraphs are introduced with the `\u003e` character in the first column, and followed by the text to be included in the HTML file.\n\nText within paragraphs and tables may contain internal references.\nAside from HTML `\u003ca\u003e` tags, the curly braces `{` and `}` create links to sections or references contained in the description of the same file format.\nFor sections, they refer to the keyword argument of the `SECTION` command.\nBy convention, section keywords are all lowercase, while reference keywords are all uppercase.\nThis is not enforced by the script and is up to the developer's taste.\n\nThe `REFERENCE` command takes three parameters, separated by spaces: the keyword which will be used to link to it, enclosed in braces `{` and `}`, the title as it should appear in the generated HTML file, enclosed within double quote characters `\"`, and an optional hyperlink.\n\n# Disclaimer\n\nAll information here is presented without any warranty on correctness.\n\nSince the source materials on these file formats aren't always of the highest quality, some misunderstandings and faulty assumptions might have occured in the documentation effort.\nAs the research on filling in details is on-going, the database is also incomplete.\n\nWith that said, the author put in effort to make sure that what is documented here is correct or at the very least plausible and consistent with available documentation.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinarymelodies%2Foldexecutableformats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbinarymelodies%2Foldexecutableformats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinarymelodies%2Foldexecutableformats/lists"}