diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0aee181 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,23 @@ +name: Builds +run-name: ${{ github.actor }} runs Gitea Actions +on: [push] + +jobs: + ExectOS WebSite: + runs-on: oscw + container: + image: codingworkshop/oscw-runner:latest + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build WebSite + run: hugo + - name: Publish WebSite + if: ${{ github.ref == 'refs/heads/master' }} + env: + OSCW_ARTIFACTS_HOSTNAME: ${{ secrets.OSCW_ARTIFACTS_HOSTNAME }} + OSCW_ARTIFACTS_USERNAME: ${{ secrets.OSCW_ARTIFACTS_USERNAME }} + OSCW_ARTIFACTS_USERKEY: ${{ secrets.OSCW_ARTIFACTS_USERKEY }} + run: webpage_publish public/ 1e8c78e4764c760b3d20991c8b769cf5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dd6d56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +public/ +.hugo_build.lock diff --git a/README.md b/README.md index 1cd8978..92e2f09 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ ## ExectOS Web Site +This repository contains the entire content of the ExectOS Website, powered by the Hugo Static Site Generator. diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..39049b3 --- /dev/null +++ b/config.toml @@ -0,0 +1,43 @@ +baseURL = "https://exectos.eu.org/" +disableKinds = ["taxonomy"] +title = "ExectOS Operating System" +theme = "exectos" +languageCode = "en-us" +defaultContentLanguage = "en" +paginate = 10 + +[menu] + +[[menu.main]] + name = "Documentation" + pre = "
" + url = "/documentation" + weight = 1 + +[[menu.main]] + name = "Contributing" + pre = " " + url = "/contributing" + weight = 2 + +[[menu.main]] + name = "Download" + pre = " " + url = "/download" + weight = 3 + +[[menu.main]] + name = "Source Code" + pre = " " + url = "/source-code" + weight = 4 + +[[menu.main]] + name = "Discord" + pre = " " + url = "https://discord.com/invite/zBzJ5qMGX7" + weight = 5 + +[params] + defaultKeywords = ["ExectOS", "XT", "XTOS", "efi", "gpl3", "kernel", "nt", "open source", "os", "osdev", "uefi boot", "win32"] + defaultDescription = "ExectOS Operating System" diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..2159e69 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,48 @@ ++++ +title = 'About Exectos' +date = 2024-06-16T12:12:40+02:00 ++++ +## About +ExectOS aims to be a stable and flexible, general purpose operating system written from scratch. It is designed to be +modular, maintainable and compatible with existing software. It implements a brand new XT architecture and features own +native application interface. On the backend, it contains a powerful driver model between device drivers and the kernel, +that enables kernel level components to be upgraded without a need to recompile all drivers. + +## XT Architecture +ExectOS is a preemptive, reentrant multitasking operating system that implements the XT architecture which derives from +NT™ architecture. It is modular, and consists of two main layers: microkernel and user modes. Its' kernel mode has +full access to the hardware and system resources and runs code in a protected memory area. It consists of executive +services, which is itself made up on many modules that do specific tasks, a kernel and drivers. Unlike the NT™, system +does not feature a separate Hardware Abstraction Layer (HAL) between the physical hardware and the rest of the OS. Instead, +XT architecture integrates a hardware specific code with the kernel. The user mode is made up of subsystems and it has been +designed to run applications written for many different types of operating systems. This allows us to implement any +environment subsystem to support applications that are strictly written to the corresponding standard (eg. DOS, or POSIX). +Thanks to that ExectOS will allow to run existing software, including Win32 applications. + +## Features + * Completely free, Open Source and community-driven modern Operating System. + * Native multiple architecture support. It runs on x86 and x86_64 and is portable to other architectures. + * Hardware layer API allows for a single unified kernel. There is no need to maintain a separate kernel forks. + * Uses a couple of ideas from other open source projects, but it’s our own ideas that really sets us apart and defines + ExectOS. The majority of code is original, not forked. + * Modular design for better compatibility with existing software and drivers, enabling binaries to remain compatible even + when the core system is updated. + * Own, XT drivers for commonly used devices as well as NT™ drivers compatibility layer for better hardware support. + * Technical support directly from the architects and developers of the system. + +## Why + * We believe, there is no ideal Operating System on the market. During ExectOS development, we try to bring most useful + features known from existing solutions, while keeping compatibility with NT™ architecture at desired level. + * Some of our ideas differ greatly from other projects and it is much easier if we do not have to fight legacy code and + ideas. + * We need the freedom to break things when necessary. + +## Goals + * Keep the greatest advantages of the NT™ architecture, while implementing new features and technologies known from + other Operating Systems. + * Flexibility where it makes sense to provide flexibility. + * Be able to deliver features that other non-commercial Operating Systems consider too ambitious. + +## Requirements +ExectOS is in very early development stage, thus its requirements have been not specified yet. However according to its +design, it requires a modern EFI enabled hardware. It is not possible currently to boot ExectOS on a legacy BIOS. diff --git a/content/contact-us.md b/content/contact-us.md new file mode 100644 index 0000000..d858288 --- /dev/null +++ b/content/contact-us.md @@ -0,0 +1,45 @@ ++++ +title = 'Contact Us' +date = 2024-06-17T18:11:52+02:00 ++++ +### Discord +ExectOS has a Discord Server to socialize, get support, support others, learn, contribute, collaborate, and stay up to +date on all things related to XTOS and Open Source. This is also a place where you can meet ExectOS Developers. Everyone +is welcome to [Join our Discord Server](https://discord.com/invite/zBzJ5qMGX7). + +### Why Discord? +Discord is a VoIP instant messaging and digital distribution platform. It + * is broadly accessible, + * is popular with non-technical people, + * broadens the appeal of XTOS beyond traditional spaces and audiences, + * allows for communication over voice, video, and text. + +### Guidelines & Rules + 1. Treat everyone with respect. Absolutely no harassment, witch hunting, sexism, racism, or hate speech will be tolerated. + 2. No age-restricted or obscene content. This includes text, images, or links featuring nudity, sex, hard violence, or + other graphically disturbing content. + 3. No spam or self-promotion (server invites, advertisements, etc) without permission from a staff member. This includes + DMing fellow members. + 4. Do not share real media depicting gore, excessive violence, or animal harm, especially with the intention to harass + or shock others. + 5. Do not share content that violates anyone's intellectual property or other rights. + 6. Do not distribute or provide access to content involving the hacking, cracking, or distribution of stolen goods, + pirated content, or accounts. + 7. If you see something against the rules or something that makes you feel unsafe, let staff know. We want this server + to be a welcoming space! + +### How to use Discord? + * [Official Discord client for any device](https://discord.com/download) + * [Discord Client via the Web Browser](https://discord.gg/) + * Any third-party client + +### Channel Overview + * **Activity**: Staying up-to-date with GIT and development activity. + * **Announcements**: Staying informed and up-to-date with important activities. + * **General**: Getting help, helping and supporting others, leveling up knowledge, participating and contributing. + * **Offtopic**: Connecting and enjoying time with other people in the community. + +## ExectOS Channels +Discover more about ExectOS and dive into a world of insightful content by visiting our official +[YouTube](https://www.youtube.com/@XT-Sys-dg3yf) channel. Join our growing community of followers and stay up-to-date +with ExectOS by subscribing and turning on notifications. Visit us now and start watching! diff --git a/content/contributing.md b/content/contributing.md new file mode 100644 index 0000000..5db5eb8 --- /dev/null +++ b/content/contributing.md @@ -0,0 +1,17 @@ ++++ +title = 'Contributing' +date = 2024-06-16T22:31:24+02:00 ++++ +### Contributing to Community + * [Contributing to ExectOS](/contributing/contributing-to-exectos) + +### Contributing Documentation + * [Updating and Writing Documentation](/contributing/writing-documentation) + +### Contributing Code + * [Building ExectOS](/contributing/building-exectos) + * [Clean Room Guidelines](/contributing/clean-room-guidelines) + * [Developing ExectOS](/contributing/developing-exectos) + * [ExectOS Coding Style](/contributing/coding-style) + * [First steps with GIT](/contributing/working-with-git) + * [Submitting Patches](/contributing/submitting-patches) diff --git a/content/contributing/building-exectos.md b/content/contributing/building-exectos.md new file mode 100644 index 0000000..ce1baa3 --- /dev/null +++ b/content/contributing/building-exectos.md @@ -0,0 +1,58 @@ ++++ +title = 'Building ExectOS' +date = 2024-06-18T16:37:24+02:00 ++++ +ExectOS must be compiled with the XTChain toolchain. Make sure you have already [downloaded](/download) and installed it. +Once this is done and the source code is ready, open a terminal and launch the XTChain Build Environment. +``` +xtchain +``` +Then, set your target build architecture and the build type and configure the project. Choose `i686` or `amd64` depending +on the architecture you wish to target. The build type can be either `DEBUG` for debugging purposes or `RELEASE` for +a production build. +``` +charch [i686|amd64] +chbuild [DEBUG|RELEASE] +./configure.sh +``` +After the sources are configured, navigate to the build directory and compile the source code. +``` +cd build +xbuild +``` +Afterwards, you will find the binaries in `build/output/binaries` directory. Apart from that, depending on build type, you +can also find a debug symbols in PDB format in `build/output/symbols` folder and precompiled libraries that can be used to +link other software using XTDK in `build/output/library` + +## Creating Qemu Disk Image +If you want to build a disk image that is ready to use with Qemu, you can use the following command: +``` +xbuild diskimg +``` +This will create a disk image that you can boot within a Qemu Virtual Machine, or convert to other format for use within +other hypervisor, like VirtualBox. + +## Testing with Qemu +After successfully compiling ExectOS, you can test it using Qemu with either hardware virtualization (KVM) or software +emulation (TCG). To start Qemu with KVM, use the `testkvm` target, and for TCG emulation, use the `testtcg` target. These +targets are provided for convenience and you can run these commands from your build directory. +``` +xbuild testkvm # For KVM hardware virtualization +``` +or +``` +xbuild testtcg # For TCG software emulation +``` +These commands will automatically configure Qemu with the appropriate settings for ExectOS and start the virtual machine. +In addition to Qemu, you can also use Bochs for emulation. Bochs is an IA-32 (x86) PC emulator that provides a different +emulation environment. To launch Bochs with the ExectOS image, run the following command: +``` +xbuild bochsvm +``` +This will start the Bochs emulator with ExectOS loaded, allowing you to test the system in an environment that may offer +different debugging capabilities compared to Qemu. + +Remember that the performance and debugging features will vary depending on whether you use KVM, TCG, or Bochs. KVM +requires that your host machine supports hardware virtualization, while TCG is a pure software emulator which works on +systems without hardware virtualization. Bochs provides a rich set of debugging features, which can be useful when +troubleshooting complex issues. diff --git a/content/contributing/clean-room-guidelines.md b/content/contributing/clean-room-guidelines.md new file mode 100644 index 0000000..880acae --- /dev/null +++ b/content/contributing/clean-room-guidelines.md @@ -0,0 +1,36 @@ ++++ +title = 'Clean Room Guidelines' +date = 2024-06-17T23:11:23+02:00 ++++ +You sometimes run into a need to use the [clean-room design](http://en.wikipedia.org/wiki/Clean_room_design) techniques +to work around the problem without infringing on any copyrights. While you attempt at reverse engineering, all +corresponding contributions should follow +[Council Directive 91/250/EEC](https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A31991L0250), and +[Directive (EU) 2016/943](https://eur-lex.europa.eu/eli/dir/2016/943/oj) of the European Parliament and any newer +directives related to reverse engineering. As per +[Article 6 Decompilation 1. (a)](https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A31991L0250) you must own +a legal copy/license of the software before doing any attempts at reverse engineering. The software must be officially +deprecated and/or obsolete. If you live outside of the European Union, you should follow similar rules described in legal +acts issued by the local authorities if they conform to the EU law. This especially means, that + +#### You are allowed to: + * **Decompile for Interoperability**: According to the directives, decompilation is permissible when it's necessary to + achieve interoperability with other software. This means you can reverse engineer parts of the software to understand + the underlying interfaces. + * **Own a Legal Copy**: You must own a legal copy or license of the software you wish to reverse engineer. This ensures + that your starting point is within legal bounds. + * **Work with Obsolete Software**: The software you reverse engineer should be obsolete or no longer maintained by the + manufacturer. This typically applies to software that is no longer receiving updates or support. + +#### You are NOT allowed to: + * **Infringe Copyrights**: You must not reproduce code or utilize proprietary algorithms from the software without + permission, as this would infringe on the copyright. + * **Break Protection Measures**: You are not permitted to crack or bypass any form of copy protection or digital rights + management that the software employs. + * **Commercially Exploit the Work**: You should not use the knowledge gained from reverse engineering for commercial + exploitation or to create direct competitors, unless you have specific agreements that allow for such activities. + * **Reveal Trade Secrets**: It is generally illegal to uncover and reveal trade secrets through the process of reverse + engineering. + +Remember, laws and regulations vary by jurisdiction and change over time, so it's crucial to stay updated on the current +laws. \ No newline at end of file diff --git a/content/contributing/coding-style.md b/content/contributing/coding-style.md new file mode 100644 index 0000000..c32674e --- /dev/null +++ b/content/contributing/coding-style.md @@ -0,0 +1,6 @@ ++++ +title = 'ExectOS Coding Style' +date = 2024-06-18T00:20:07+02:00 ++++ +At the moment of writing this article, no coding style was established. You should check how existing code looks like and +follow its current formatting. diff --git a/content/contributing/contributing-to-exectos.md b/content/contributing/contributing-to-exectos.md new file mode 100644 index 0000000..d050eef --- /dev/null +++ b/content/contributing/contributing-to-exectos.md @@ -0,0 +1,30 @@ ++++ +title = 'Contributing to ExectOS' +date = 2024-06-17T22:35:51+02:00 ++++ +The ExectOS project and CodingWorkshop Team always seek new contributors from all skill levels. No matter if you are +a developer, tester, designer, or techwriter, your contributions are always appreciated. + +### Software Developers +We are always looking for people proficient in C and/or Assembly, especially familiar with tools such as Bochs, Qemu, +or VirtualBox. Writing an Operating System is not a beginner's task. In fact, writing an Operating System is usually +considered the most difficult programming task. Join the exclusive ranks of people knowing OSDev concepts, and yet +smaller ranks of people knowing the secrets of NT™ architecture. + +### Testers +No software is usable if it is found to be unstable. Writing an Operating System, is yet more complex task. Tester role +is responsible for assisting the development process by running [builds](/download) and providing a feedback. All and any +information about issues you encountered during this process can be +[reported](https://git.codingworkshop.eu.org/xt-sys/exectos/issues). The more detailed report is, the easier it will be +to fix it. At least basic knowledge in collecting information from a crash, like backtraces and knowledge of using +debugger will help you. When submitting issues, take care that the bug report is not a duplicate of an already existing, +open issue. You should always follow the template specified for issues in our Gitea. + +### Technical Writers +As a team, we focus mostly on OS development. We are looking for some creative people to update and write documentation, +post content to this website as well as social media accounts to promote ExectOS. New web site design ideas and bug fixes +are as well welcome. + +### Community Managers +The ExectOS community keeps in touch via [Discord](/contact-us). Community Manager role is responsible to keep people +involved, keep discussions going and moderate. diff --git a/content/contributing/developing-exectos.md b/content/contributing/developing-exectos.md new file mode 100644 index 0000000..9cb1618 --- /dev/null +++ b/content/contributing/developing-exectos.md @@ -0,0 +1,38 @@ ++++ +title = 'Developing ExectOS' +date = 2024-06-18T16:36:47+02:00 ++++ +We leave you free to choose your working environment, but we also recommend working with VS Code, or VS Codium. Both are +free to use, open-source IDEs, compatible with Windows, Linux, and macOS operating systems. They falls under the same +category as Atom, Sublime, and Text Wrangler, but they also has more advanced features. While the first one is am original +code editor from the Microsoft©, VS Codium is essentially a telemetry-free, open-source version of VS Code. + +### Recommended Extensions + * **[Clangd](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd)**: helps developers write, + understand and improve C/C++ code by providing code completion, compile errors and warnings, hover information and + inlay hints, include management, code formatting and more. + * **[CMake](https://open-vsx.org/extension/twxs/cmake)**: extension provides support for CMake in Visual Studio Code. + * **[Codeium](https://open-vsx.org/extension/Codeium/codeium)**: modern coding superpower, a free code acceleration + toolkit built on cutting edge AI technology. Currently, Codeium provides autocomplete, chat, and search capabilities + in 70+ languages, with lightning fast speeds and state-of-the-art suggestion quality. + * **[GNU Assembler Language Support](https://open-vsx.org/extension/basdp/language-gas-x86)**: extension provides + language support for x86 and x86_64 assembly language in AT&T dialect. + * **[Markdown Preview Enhanced](https://open-vsx.org/extension/shd101wyy/markdown-preview-enhanced)**: extension that + provides many useful functionalities such as automatic scroll sync, math typesetting, mermaid, PlantUML, pandoc, + PDF export, code chunk, presentation writer, etc. + +### Getting Started with VS Code +Opening a project in Visual Studio Code is straightforward, especially that you can find `ExectOS.code-workspace` file +in project's GIT repository. Once you checkout the source code, you can open the workspace file directly from the command +line: +``` +code ExectOS.code-workspace +``` +Alternatively, you can start VS Code and use the menu options: + * Open Visual Studio Code. + * Go to File > Open Workspace from File... + * Navigate to the directory containing your cloned repository. + * Select the ExectOS.code-workspace file and click Open. + +VS Code will load everything defined in the workspace file, including folder structure and settings specific to the +ExectOS project. You're now ready to start working on the project. diff --git a/content/contributing/submitting-patches.md b/content/contributing/submitting-patches.md new file mode 100644 index 0000000..4ded142 --- /dev/null +++ b/content/contributing/submitting-patches.md @@ -0,0 +1,52 @@ ++++ +title = 'Submitting Patches' +date = 2024-06-17T23:47:42+02:00 ++++ +In order to review code better and use established lines of communication, we accept code in the form of Pull Requests +on our [Gitea](https://git.codingworkshop.eu.org/xt-sys/exectos/pulls) instance. The process may seem a little bit +complicated at first, but it will become very natural. It is important for us, to make sure the author and email settings +for your GIT are configured correctly. You should follow our '[Working with GIT](/contributing/working-with-git)' document, +but the key point is to use your real name and valid e-mail address. This is not just for developers to show a stronger +commitment and establish trust, but also helps discourage irresponsible programmers from submitting unacceptable code. +You will need a Gitea account which must also use your real name. You should be precise; having the names match helps in +identifying commits. + +### Patch Guidelines +In order to make your patches as easy to check as possible, try to keep them small, clear, and atomic: + * Include only closely related changes in one commit. + * Don't implement extra things that no one uses. + * Try to limit each merge request to only a few commits. + * Limit a commit to changing a single file or component. + +Above rules make the Pull Request easier to review. + +### Commit Message + + +### Quality Check +It never hurts to check through your changes one last time. Take a while, to look at each line of the patch and make sure +there are no unintentional or unrelated changes. Also make sure that the layout of your code conforms to our +[coding style](/contributing/coding-style). + +### Sending Pull Request +After checking in your local changes, you can submit a Pull Request on Gitea to get your changes upstream. This requires +you to be working on a Gitea fork. You should make up a temporary branch name for your changes. That branch will be deleted +once the merge request is merged, so it's better to avoid using the master branch directly. + +### Managing Pull Request +After you've submitted your merge request, a reviewer will be assigned to it, if someone is responsible for that area of +the code. You can also assign a reviewer yourself if you know who the right person is. If a reviewer gives some feedback +or a critique, carefully think about what they say and fix your patch before resubmitting. When updating your changes, you +can simply push the fixes as a new commit on top of your Pull Request. This is prefferred way, as allows us to compare +code before and after your fixes. All commits can be squashed by a reviewer upon merge. + +If your Pull Request remains in the queue for several weeks without being committed and without feedback, you can ask for +further suggestions on our [Discord](/contact-us) server. If you have patches rejected multiple times, don't be discouraged. +You might consider finding a mentor willing to pre-review your changes before you submit them again. + +### Reviewing Pull Request +If you are asked to review a merge request, and find things that need to be improved, you should add a comment to the merge +request from the Gitea interface. You can also fix things up yourself and push updated commits to the original branch, once +submitter explicitly give you access to his GIT repository. If you think that the merge request is good to go in, you +should mark it approved. As a rule, a merge request won't be committed until all reviewers have approved it. If you have +been assigned as a reviewer but you feel that you cannot meaningfully review the changes, feel free to unassign yourself. diff --git a/content/contributing/working-with-git.md b/content/contributing/working-with-git.md new file mode 100644 index 0000000..fee229b --- /dev/null +++ b/content/contributing/working-with-git.md @@ -0,0 +1,53 @@ ++++ +title = 'Working with GIT' +date = 2024-06-17T17:31:15+02:00 ++++ +The preferred method of contributing patches to ExectOS is via our self-hosted [Gitea](https://git.codingworkshop.eu.org) +instance. + +### Initial Setup +First of all you will have to create an account on our [Gitea](https://git.codingworkshop.eu.org) instance. Do note that +you can also use your existing GitHub or GitLab account via OAuth. Creating new account on our Gitea is pretty straight +forward, anyway: + 1. Go to our Gitea instance and click on "[Register](https://git.codingworkshop.eu.org/user/sign_up)" link in top, + right corner. + 2. Fill in your information. + 3. Add your SSH key(s) for easier pushing via SSH instead of HTTPS. + 4. Consider also enabling 2FA for improved security access and signing your commits with GPG. + +### Cloning Repositories + 1. Go to Gitea's frontage after you’ve signed in and search for the repository you want to clone. Click on its name to + open it. + 2. Click on 'Fork' button, to create your own copy of the repository. + 3. Either clone your fork of it, with + ``` + git clone ssh://git@git.codingworkshop.eu.org:8822/{{ .Summary }}
+ +{{ end }} +{{ end }} diff --git a/themes/exectos/layouts/_default/script.html b/themes/exectos/layouts/_default/script.html new file mode 100644 index 0000000..2038532 --- /dev/null +++ b/themes/exectos/layouts/_default/script.html @@ -0,0 +1,12 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} +