├── .github
└── workflows
│ └── sitegen.yml
├── .gitignore
├── LICENSE
├── README.md
├── adoc
├── adoctor_input_template.adoc
└── html5
│ └── embedded.html.erb
├── categories.yml
├── css
├── layout.css
├── stork.css
└── styles.css
├── generator
├── .gitignore
├── LICENSE
├── README.md
├── Setup.hs
├── app
│ ├── Main.hs
│ └── Stork.hs
├── default.nix
├── generator.cabal
├── nix
│ ├── sources.json
│ └── sources.nix
├── package.yaml
├── stack.yaml
└── stack.yaml.lock
├── html
├── error_page.html
├── navbar.html
├── tag_index.html
├── tag_list.html
└── wrapper.html
├── index.adoc
├── licenses
└── CC0.txt
├── pages
├── .stivale_cs_barebones.adoc
├── calling_conventions.adoc
├── cross_clang.adoc
├── editorial_rules.adoc
├── fundamentals.adoc
├── guidelines.adoc
├── stivale.adoc
├── stivale_barebones.adoc
├── visual_studio.adoc
├── writer_tutorial.adoc
└── x86.adoc
├── sources.bib
└── static
├── logo.svg
└── search.js
/.github/workflows/sitegen.yml:
--------------------------------------------------------------------------------
1 | name: Generate pages
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches: [ main ]
7 |
8 | env:
9 | STORK_VERSION: 1.6.0
10 |
11 | jobs:
12 | gen:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout wiki
16 | uses: actions/checkout@v2
17 | with:
18 | fetch-depth: 0
19 | path: wiki
20 |
21 | - uses: cachix/install-nix-action@v15
22 | with:
23 | extra_nix_config: |
24 | trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= osdev-wiki-cache-2:xnfH8Tkm0Sp5c8dDxpuFE0/w1PB6E4NUxjcnShNdkZ0=
25 | substituters = https://cache.nixos.org/ https://hydra.iohk.io s3://osdev-wiki-cache?scheme=https&endpoint=s3.us-west-000.backblazeb2.com
26 |
27 | - name: Maybe add secrets
28 | run: |
29 | set -uxe
30 | [ -z "$AWS_CREDS$NIX_SIGNING_KEY" ] && exit
31 | mkdir ~/.aws
32 | echo "$AWS_CREDS" > ~/.aws/credentials
33 | echo "$NIX_SIGNING_KEY" > ~/.nix-key
34 | echo secret-key-files = ~/.nix-key | sudo tee -a /etc/nix/nix.conf
35 | env:
36 | NIX_SIGNING_KEY: ${{ secrets.NIX_SIGNING_KEY }}
37 | AWS_CREDS: ${{ secrets.AWS_CREDS }}
38 |
39 | - name: Cache dependency builds
40 | uses: actions/cache@v2
41 | with:
42 | path: |
43 | ~/.cache/nix/*sqlite*
44 | key: ${{ runner.os }}
45 | - name: Get deps
46 | run: |
47 | set -xe
48 | gem install --user-install asciidoctor asciidoctor-bibtex tilt \
49 | pygments.rb
50 | pip install --user -U Pygments
51 | nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
52 | nix-channel --update nixpkgs
53 | nix-env -i "stork-$STORK_VERSION"
54 |
55 | - name: Build generator
56 | run: |
57 | cd wiki/generator
58 | nix-build
59 |
60 | - name: Update nix caches
61 | if: always()
62 | run: |
63 | set -xe
64 | [ -r ~/.nix-key ] || exit 0
65 | cd wiki/generator
66 | nix store sign -k ~/.nix-key "$(readlink result)"
67 | stork_path="$(nix-env -q --installed --out-path --no-name stork)"
68 | nix copy --to 's3://osdev-wiki-cache?scheme=https&endpoint=s3.us-west-000.backblazeb2.com&profile=osdev-wiki-cache' \
69 | "$(readlink result)" "$stork_path"
70 |
71 | - name: Build site
72 | run: |
73 | export GEM_HOME="$(ruby -e 'puts Gem.user_dir')"
74 | export PATH="$GEM_HOME/bin:$HOME/.cargo/bin:$HOME/.local/bin:$PATH"
75 | export PATH="$HOME/.nix-profile/bin:$PATH"
76 |
77 | cd wiki
78 | export GIT_HASH="$(git rev-parse HEAD)"
79 | generator/result/bin/generator build
80 | env:
81 | WIKI_FORGE: ${{ format('https://github.com/{0}', github.repository) }}
82 |
83 | - name: Checkout publishing
84 | uses: actions/checkout@v2
85 | with:
86 | path: _out
87 | repository: osdev-wiki/osdev-wiki.github.io
88 | fetch-depth: 0
89 | ssh-key: "${{ secrets.DEPLOY_KEY }}"
90 | if: ${{ github.repository == 'osdev-wiki/wiki' }}
91 | - name: Checkout publishing (for forks)
92 | uses: actions/checkout@v2
93 | with:
94 | path: _out
95 | token: "${{ github.token }}"
96 | fetch-depth: 0
97 | ref: gh-pages
98 | if: ${{ github.repository != 'osdev-wiki/wiki' }}
99 |
100 | - name: Publish
101 | run: |
102 | set -xe
103 |
104 | cd _out
105 | find . -not -path './.git/*' -not -path ./.git -delete
106 | echo osdev.wiki > CNAME
107 | touch .nojekyll
108 |
109 | rsync -a ../wiki/_site/ ./
110 |
111 | export COMMIT_HASH="$(git -C ../wiki rev-parse HEAD)"
112 | git config user.name "Wiki Autobuild"
113 | git config user.email "autobuild@osdev.wiki"
114 | git add .
115 | git commit -m "$COMMIT_HASH"
116 | git push
117 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 | _cache
3 | _site
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Creative Commons Legal Code
2 |
3 | CC0 1.0 Universal
4 |
5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12 | HEREUNDER.
13 |
14 | Statement of Purpose
15 |
16 | The laws of most jurisdictions throughout the world automatically confer
17 | exclusive Copyright and Related Rights (defined below) upon the creator
18 | and subsequent owner(s) (each and all, an "owner") of an original work of
19 | authorship and/or a database (each, a "Work").
20 |
21 | Certain owners wish to permanently relinquish those rights to a Work for
22 | the purpose of contributing to a commons of creative, cultural and
23 | scientific works ("Commons") that the public can reliably and without fear
24 | of later claims of infringement build upon, modify, incorporate in other
25 | works, reuse and redistribute as freely as possible in any form whatsoever
26 | and for any purposes, including without limitation commercial purposes.
27 | These owners may contribute to the Commons to promote the ideal of a free
28 | culture and the further production of creative, cultural and scientific
29 | works, or to gain reputation or greater distribution for their Work in
30 | part through the use and efforts of others.
31 |
32 | For these and/or other purposes and motivations, and without any
33 | expectation of additional consideration or compensation, the person
34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35 | is an owner of Copyright and Related Rights in the Work, voluntarily
36 | elects to apply CC0 to the Work and publicly distribute the Work under its
37 | terms, with knowledge of his or her Copyright and Related Rights in the
38 | Work and the meaning and intended legal effect of CC0 on those rights.
39 |
40 | 1. Copyright and Related Rights. A Work made available under CC0 may be
41 | protected by copyright and related or neighboring rights ("Copyright and
42 | Related Rights"). Copyright and Related Rights include, but are not
43 | limited to, the following:
44 |
45 | i. the right to reproduce, adapt, distribute, perform, display,
46 | communicate, and translate a Work;
47 | ii. moral rights retained by the original author(s) and/or performer(s);
48 | iii. publicity and privacy rights pertaining to a person's image or
49 | likeness depicted in a Work;
50 | iv. rights protecting against unfair competition in regards to a Work,
51 | subject to the limitations in paragraph 4(a), below;
52 | v. rights protecting the extraction, dissemination, use and reuse of data
53 | in a Work;
54 | vi. database rights (such as those arising under Directive 96/9/EC of the
55 | European Parliament and of the Council of 11 March 1996 on the legal
56 | protection of databases, and under any national implementation
57 | thereof, including any amended or successor version of such
58 | directive); and
59 | vii. other similar, equivalent or corresponding rights throughout the
60 | world based on applicable law or treaty, and any national
61 | implementations thereof.
62 |
63 | 2. Waiver. To the greatest extent permitted by, but not in contravention
64 | of, applicable law, Affirmer hereby overtly, fully, permanently,
65 | irrevocably and unconditionally waives, abandons, and surrenders all of
66 | Affirmer's Copyright and Related Rights and associated claims and causes
67 | of action, whether now known or unknown (including existing as well as
68 | future claims and causes of action), in the Work (i) in all territories
69 | worldwide, (ii) for the maximum duration provided by applicable law or
70 | treaty (including future time extensions), (iii) in any current or future
71 | medium and for any number of copies, and (iv) for any purpose whatsoever,
72 | including without limitation commercial, advertising or promotional
73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74 | member of the public at large and to the detriment of Affirmer's heirs and
75 | successors, fully intending that such Waiver shall not be subject to
76 | revocation, rescission, cancellation, termination, or any other legal or
77 | equitable action to disrupt the quiet enjoyment of the Work by the public
78 | as contemplated by Affirmer's express Statement of Purpose.
79 |
80 | 3. Public License Fallback. Should any part of the Waiver for any reason
81 | be judged legally invalid or ineffective under applicable law, then the
82 | Waiver shall be preserved to the maximum extent permitted taking into
83 | account Affirmer's express Statement of Purpose. In addition, to the
84 | extent the Waiver is so judged Affirmer hereby grants to each affected
85 | person a royalty-free, non transferable, non sublicensable, non exclusive,
86 | irrevocable and unconditional license to exercise Affirmer's Copyright and
87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the
88 | maximum duration provided by applicable law or treaty (including future
89 | time extensions), (iii) in any current or future medium and for any number
90 | of copies, and (iv) for any purpose whatsoever, including without
91 | limitation commercial, advertising or promotional purposes (the
92 | "License"). The License shall be deemed effective as of the date CC0 was
93 | applied by Affirmer to the Work. Should any part of the License for any
94 | reason be judged legally invalid or ineffective under applicable law, such
95 | partial invalidity or ineffectiveness shall not invalidate the remainder
96 | of the License, and in such case Affirmer hereby affirms that he or she
97 | will not (i) exercise any of his or her remaining Copyright and Related
98 | Rights in the Work or (ii) assert any associated claims and causes of
99 | action with respect to the Work, in either case contrary to Affirmer's
100 | express Statement of Purpose.
101 |
102 | 4. Limitations and Disclaimers.
103 |
104 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
105 | surrendered, licensed or otherwise affected by this document.
106 | b. Affirmer offers the Work as-is and makes no representations or
107 | warranties of any kind concerning the Work, express, implied,
108 | statutory or otherwise, including without limitation warranties of
109 | title, merchantability, fitness for a particular purpose, non
110 | infringement, or the absence of latent or other defects, accuracy, or
111 | the present or absence of errors, whether or not discoverable, all to
112 | the greatest extent permissible under applicable law.
113 | c. Affirmer disclaims responsibility for clearing rights of other persons
114 | that may apply to the Work or any use thereof, including without
115 | limitation any person's Copyright and Related Rights in the Work.
116 | Further, Affirmer disclaims responsibility for obtaining any necessary
117 | consents, permissions or other rights required for any use of the
118 | Work.
119 | d. Affirmer understands and acknowledges that Creative Commons is not a
120 | party to this document and has no duty or obligation with respect to
121 | this CC0 or use of the Work.
122 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## The OSDev Wiki
2 |
3 | The goal of this wiki is to create a decentralized repository of accurate and
4 | up-to-date information on operating system development.
5 | It is currently **WIP** and **not ready** for use.
6 |
7 | This wiki is not endorsed by, does not have any connection to, and is not
8 | related in any way with another wiki found at
9 | [wiki.osdev.org](https://wiki.osdev.org).
10 |
11 | # Contributing
12 |
13 | ## Installing dependencies
14 |
15 | This wiki is written in Haskell.
16 |
17 | The project has some non-Haskell dependencies:
18 |
19 | - [Pygments](https://github.com/pygments/pygments) - `pip install Pygments`
20 | - [AsciiDoctor](https://asciidoctor.org/) - `gem install asciidoctor`
21 | - [asciidoctor-bibtex](https://github.com/asciidoctor/asciidoctor-bibtex) - `gem install asciidoctor-bibtex`
22 | - [stork](https://stork-search.net/docs/install) - `cargo install stork-search --locked`
23 |
24 | ## Building and running
25 |
26 | Because building the Haskell dependencies takes a long time, we recommend using
27 | our Nix binary cache to get all the dependencies without building (~10 min
28 | setup time).
29 |
30 | ### With Nix
31 |
32 | [Install nix](https://nixos.org/download.html#download-nix).
33 |
34 | Edit the configuration file added by Nix at `/etc/nix/nix.conf` and add these
35 | two lines to setup the binary cache:
36 |
37 | ```nix
38 | trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= osdev-wiki-cache-2:xnfH8Tkm0Sp5c8dDxpuFE0/w1PB6E4NUxjcnShNdkZ0=
39 | substituters = https://cache.nixos.org/ https://hydra.iohk.io s3://osdev-wiki-cache?scheme=https&endpoint=s3.us-west-000.backblazeb2.com
40 | ```
41 |
42 | From the root of the project, build:
43 |
44 | ```shell
45 | cd generator
46 | nix-build
47 | ```
48 |
49 | Run the generator:
50 |
51 | ```shell
52 | cd ..
53 | ./generator/result/bin/generator watch
54 | ```
55 |
56 | ### Building locally
57 |
58 | **Alternatively**, you can build locally (~1 hour build time). You do _not_
59 | need to do this if you have done the Nix setup above.
60 |
61 | You will need to have Stack installed to compile and run the main binary.
62 |
63 | From the root of the project, run:
64 |
65 | ```shell
66 | cd generator
67 | stack build
68 | ```
69 |
70 | Run the generator:
71 |
72 | ```shell
73 | stack run --cwd .. watch
74 | ```
75 |
76 | ## Writing content
77 |
78 | All content can be found in `pages/`.
79 | You can find our [quick guide here](https://osdev.wiki/pages/writer_tutorial.html)
80 | to learn the basics (~2 min reading).
81 |
--------------------------------------------------------------------------------
/adoc/adoctor_input_template.adoc:
--------------------------------------------------------------------------------
1 | = $title$
2 |
3 | $body$
4 |
--------------------------------------------------------------------------------
/adoc/html5/embedded.html.erb:
--------------------------------------------------------------------------------
1 |
<%= converter.convert self, 'outline' %>
2 |
3 | <%= header.render() %>
4 | <%= content %>
5 | <% if self.footnotes? %>
6 |