Import ExectOS Web Site #1

Merged
belliash merged 41 commits from development into master 2024-06-18 23:00:03 +02:00
49 changed files with 1096 additions and 0 deletions

23
.github/workflows/build.yml vendored Normal file
View File

@ -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

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
public/
.hugo_build.lock

View File

@ -1 +1,2 @@
## ExectOS Web Site
This repository contains the entire content of the ExectOS Website, powered by the Hugo Static Site Generator.

43
config.toml Normal file
View File

@ -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 = "<div class='fa fa-book'></div> "
url = "/documentation"
weight = 1
[[menu.main]]
name = "Contributing"
pre = "<div class='fa fa-code-fork'></div> "
url = "/contributing"
weight = 2
[[menu.main]]
name = "Download"
pre = "<div class='fa fa-cubes'></div> "
url = "/download"
weight = 3
[[menu.main]]
name = "Source Code"
pre = "<div class='fa fa-codepen'></div> "
url = "/source-code"
weight = 4
[[menu.main]]
name = "Discord"
pre = "<div class='fa fa-wechat'></div> "
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"

48
content/_index.md Normal file
View File

@ -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&trade; 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&trade;, 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 its 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&trade; 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&trade; 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&trade; 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.

45
content/contact-us.md Normal file
View File

@ -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!

17
content/contributing.md Normal file
View File

@ -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)

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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&trade; 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.

View File

@ -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&copy;, 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.

View File

@ -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.

View File

@ -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 youve 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/<username>/<repository>.git .
```
or if you already cloned the repo you can add your fork as remote, with
```
git remote add <my_fork> ssh://git@git.codingworkshop.eu.org:8822/<username>/<repository>.git
```
### Proper GIT Setup
ExectOS uses GIT for Source Code Management (SCM) and GIT uses a username to associate commits with an identity. The GIT
username is not the same as your Gitea username. You can change the name that is associated with your GIT commits. The new
name you set will be visible in any future commits you push to Gitea from the command line. In order to accept your
patches, we require you to provide your real name and valid e-mail address. This can be done with the following commands:
```
git config --global user.name "<your real name>"
git config --global user.email "<your email>"
```
Above command will update username and email globally, for every repository on your computer. Alternatively, these changes
can be introduced for a single repository, by changing the current working directory to the local repository where you want
to configure the name that is associated with your GIT commits and issueing the following commands:
```
git config user.name "<your real name>"
git config user.email "<your email>"
```
### Keeping Forks Updated
You should always ensure that you have the latest version of the repository you want to work on before starting your work to
avoid duplicating work and merge conflicts. You can do so with:
```
git pull <remote> master --rebase
```

View File

@ -0,0 +1,36 @@
+++
title = 'Writing Documentation'
date = 2024-06-17T18:08:34+02:00
+++
Our documentation is integrated with this website and it is stored in GIT repository. This website is powered by the Hugo
Static Site Generator. All pages are created as simple Markdown files and everyone is free to submit Pull Requests to
enhance the website. This article will help you better understand the proper guidelines for submitting documentation.
### Guidelines
* **Use standard English**: Use standard United States (U.S.) English throughout all technical publications.
* **Write in active-voice**: Active voice sentences clarify the performer of an action and are easier to understand than
passive-voice sentences.
* **Use present simple tense**: Users read documentation to perform tasks or gather information. For users, these
activities take place in their present, so the present tense is appropriate in most cases.
* **Write in second person**: Users are more engaged with documentation when you use second person (that is, you address
the user as "you").
* **Use appropriate mood**: For procedures, use imperative mood.
* **Avoid ambiguous titles**: Each title should include a clear description of the pages subject.
* **Write objectively**: Do not use humor, jargon, exclamation marks, idioms, metaphors, and other colloquialisms.
* **Write positively**: Write in a positive tone. Positive sentences improve readability.
* **Avoid personification**: Avoid the adverbs such as "probably", "hopefully", "basically", and so on.
* **Do not use contractions**: Generally, do not contract the words.
* **Use spelling and grammar checking tools**: Run text through spelling and grammar checking tools, if available.
### Testing Documentation
1. [Download](https://gohugo.io/) Hugo v0.125.7 or newer.
2. Open a shell in the root of your repository and use below command to start server
```
hugo server -DF
```
3. Open `http://localhost:1313/` in your browser to access the website and check the results.
### Submitting Patches
We welcome patches for both documentation and the website. We use the GNU Free Documentation License 1.3 or later for all
documentation and website content. Contributions using other licenses are unlikely to be accepted. Patches should be
contributed via our [Gitea instance](https://git.codingworkshop.eu.org/xt-sys/website).

15
content/documentation.md Normal file
View File

@ -0,0 +1,15 @@
+++
title = 'Documentation'
date = 2024-06-16T22:27:36+02:00
+++
### Getting Started
* [Frequently Asked Questions](/faq)
* [Get in Touch](/contact-us)
* [Installation Guide](/documentation/install-guide)
### Contributing Documentation
* [Contributing to ExectOS](/contributing)
* [Working with GIT](/contributing/working-with-git)
### Technical Details
* [XT Boot Loader](/documentation/xtldr)

View File

@ -0,0 +1,50 @@
+++
title = 'Installation Guide'
date = 2024-06-17T16:41:29+02:00
+++
ExectOS is in early development phase and thus it is NOT suitable for daily use, especially on real hardware. It is
recommended to run it in a virtual machine like Qemu or VirtualBox. Otherwise, you act at your own risk!
### Running in Qemu
Running ExectOS in Qemu is straight-forward, as our build pipeline produces a disk image, that is ready to use in Qemu.
Once you download it and extract, you can use below commands to run the virtual machine, depending on the target CPU
architecture of the image. For x86_64 use:
```
qemu-system-x86_64 -cpu host -enable-kvm -m 2G -hda disk-amd64.img -serial stdio \
-drive file=sdk/firmware/ovmf_code_amd64.fd,if=pflash,format=raw,unit=0,readonly=on \
-drive file=sdk/firmware/ovmf_vars_amd64.fd,if=pflash,format=raw,unit=1
```
And for i686 use:
```
qemu-system-i386 -cpu host -enable-kvm -m 1G -hda disk-i686.img -serial stdio \
-drive file=sdk/firmware/ovmf_code_i686.fd,if=pflash,format=raw,unit=0,readonly=on \
-drive file=sdk/firmware/ovmf_vars_i686.fd,if=pflash,format=raw,unit=1
```
Above commands require an UEFI firmware to be available. It can be found in the
[ExectOS GIT repository](https://git.codingworkshop.eu.org/xt-sys/exectos/src/branch/master/sdk/firmware).
### Running in VirtualBox
VirtualBox is commonly used for running the system in an isolated environment. In this case, the same disk image as
for Qemu can be used. However, it needs to be converted to QCOW2 format, that is supported by VirtualBox. This can be
done with the following command:
```
qemu-img convert -O qcow2 disk.img disk.qcow2
```
Once, the disk image is converted, you can create a new virtual machine. As an Operating System, you can choose either
32-bit or 64-bit Windows&reg; 10, depending on ExectOS disk image architecture. Just make sure, that EFI support is
enabled.
### Running on Bare Metal
It is recommended to not install, nor run ExectOS on a real hardware. Otherwise, installation should be
straight-forward and self descriptive:
* Download a binary package or build XTOS yourself.
* Prepare a pendrive or USB stick. It should have at least first partition formatted as FAT32.
* Copy all binaries to USB drive, keeping the existing directory structure. Contents of the archive, or contents of
`build/output/binaries` is the root of your drive. Do NOT paste them into any subdirectory.
* Reboot the computer.
* Enter Firmware Setup or Boot Selection menu and choose your USB drive.
* Viola, enjoy!
In case of any problems, take a photo of your screen and contact with ExectOS developers.

View File

@ -0,0 +1,62 @@
+++
title = 'XT Boot Loader'
date = 2024-06-16T23:43:56+02:00
+++
XTLDR (abbreviation of XT Loader) is the boot loader dedicated for XTOS. It is the first program launched by the Unified
Extensible Firmware Interface (UEFI) of the computer and is responsible for loading the rest of ExectOS. The procedure is
quite different for UEFI and BIOS systems. However currently, legacy BIOS boot procedure is not supported by ExectOS.
### UEFI
The Unified Extensible Firmware Interface (UEFI) has support for reading both the partition table as well as file systems.
UEFI does not launch any boot code from the Master Boot Record (MBR) whether it exists or not, instead booting relies on
boot entries in the NVRAM. The UEFI specification mandates support for the FAT12, FAT16, and FAT32 file systems, as well
as ISO9660 for optical discs. Any conformant vendor can optionally add support for additional file systems.
UEFI launches EFI applications, e.g. boot loaders, boot managers, UEFI shell, etc. These applications are usually stored
as files in the EFI system partition (ESP). The applications can be launched by adding a boot entry to the NVRAM or from
the UEFI shell.
### Startup Process
When a PC is powered on its UEFI firmware initializes the hardware components of the system. This includes CPU, memory,
and device initialization. Firmware has its own boot manager, which is responsible for loading UEFI applications stored
in the EFI System Partition (ESP), a dedicated partition on a data storage device, formatted with any from the supported
filesystem and attempts to load the selected EFI application (usually an OS bootloader) into memory and transfers control
to it.
XTLDR accesses the file system on the ESP partition and reads the xtldr.ini file to determine what Operating Systems are
present. Also additional configuration, like debugging options is loaded. Afterwards, XTLDR loads additional modules, in
order to extend its functionality as well as to support additional file systems, that are normally not supported by UEFI.
This allows to boot Operating System kernel from the partition other to ESP. Then boot loader menu is presented to the
user.
![XTLDR Boot Menu](/images/exectos/xtldr_boot_menu.png)
After a user choose the position from the list, or timeout exceeded, XTLDR continues with loading additional modules,
specific to the chosen Operating System. If a non XTOS is selected, XTLDR loads the associated kernel file listed in the
configuration file and gives it control. Otherwise, if XTOS is selected, boot loader loads registry HIVE data, kernel
and boot drivers. Finally, starts the kernel, passing to it all the necessary information.
### XTLDR Configuration
XTLDR's first action is to read the xtldr.ini file. It describes whole configuration for the boot loader as well as allows
the user to choose which Operating System to boot from at the menu. it also allows the user to pass preconfigured options
to the kernel. Regardless an OS, the location of the Operating System is written as an ARC (Advanced RISC Computing) path.
Below is an example of the xtldr.ini file:
```
[XTLDR]
Debug=COM1,115200
Default=ExectOS
KeepLastBoot=TRUE
Modules=beep
Timeout=10
Tune=400 880 2 988 2 783 2 392 2 587 3
[ExectOS]
SystemName="ExectOS Operating System"
SystemType=XTOS
BootModules=xtos_o
SystemPath=multi(0)disk(0)rdisk(0)partition(1)/ExectOS
KernelFile=xtoskrnl.exe
Parameters=DEBUG=COM1,115200
```
A full list of configuration options with their descriptions can be found in the [example configuration](https://git.codingworkshop.eu.org/xt-sys/exectos/src/branch/master/bootdata/xtldr/xtldr.ini)
file in project's GIT repository.

20
content/download.md Normal file
View File

@ -0,0 +1,20 @@
+++
title = 'Download'
date = 2024-06-16T22:35:11+02:00
+++
### ExectOS
ExectOS supports currently two architectures (i686 and AMD64). To get started today, either download a binaries for one of
supported architectures or test drive ExectOS on the QEMU emulator by downloading a disk image. You can find a full list
of files, available to download at [this page](https://artifacts.codingworkshop.eu.org/ExectOS/). Each file contains an
information about build date, SHA1, architecture and a type of artifact, eg:
* ExectOS-20240614-6b70074ec6-i686-bin.tar.gz - This archive contains a binary files that can be copied to USB disk and
booted up on bare metal hardware.
* ExectOS-20240614-6b70074ec6-i686-lib.tar.gz - Contains a libraries useful for building 3rd party drivers.
* ExectOS-20240614-6b70074ec6-i686-sym.tar.gz - This archive includes a debug symbols in PDB format.
* ExectOS-20240614-6b70074ec6-i686.img.gz - This is a compressed QEMU disk image, that can be used with this emulator.
### XTChain
Get the latest prebuilt toolchain, needed to compile the ExectOS Operating System. This includes the Clang compiler, and
other build utilities you need to cross compile the project, including system core (boot loader, kernel and drivers).
The toolchain supports both i686 and AMD64 architectures, as well as ARMv7 and AArch64. Unfortunately, at the moment binary
package is available only for Linux host. To download the XTChain, click [here](https://github.com/xt-sys/xtchain/releases).

103
content/faq.md Normal file
View File

@ -0,0 +1,103 @@
+++
title = 'Frequently Asked Questions'
date = 2024-06-16T12:33:36+02:00
+++
#### What is ExectOS?
ExectOS is an open-source, general purpose operating system written from scratch and based on new XT architecture.
It aims to be modular, maintainable and compatible with existing software.
#### What does ExectOS mean? What is the origin of this name?
The name 'ExectOS' doesnt have a specific historical origin, as it appears to be a unique creation for this
Operating System. The term 'Exec' within ExectOS directly relates to execution - the act of carrying out tasks,
processes, and instructions. In the context of operating system, execution involves managing programs, resources,
and system operations. Users should associate ExectOS with streamlined performance and reliability.
#### What does the ExectOS logo present and what is the relation between the logo and the OS name?
The three wavy lines in the ExectOS logo evoke a sense of fluidity and movement. Their arrangement, forms a shape
reminiscent of the capital letter E, directly corresponding to the initial letter of ExectOS. The flowing waves
symbolize dynamism, progress, and forward motion. The smooth curves suggest a seamless user experience, while gradient
colors represent diversity and adaptability. All of this convey a message of innovation, user-friendliness, and
adaptability. It invites users to explore a new operating system that promises a seamless computing experience.
#### What is the difference between XTOS and ExectOS?
XTOS is a common name of the Operating System standard based on the XT architecture. ExectOS is a name of the specific
project, that is a reference XTOS implementation, that implements all requirements from a corresponding specification.
#### What does XT mean?
XT is a name of XTOS architecture of an Operating System, that consists of two main components, user mode and kernel
mode. It derives mostly from NT&trade; architecture, as well as uses a couple of ideas from other open source projects.
XT is a short for "neXTgen" architecture, but you can also call it "eXTendable".
#### What architectures does ExectOS support?
ExectOS supports the x86_64 (sometimes called AMD64 or EM64T), as well as i686 CPU architectures. However, it requires
a modern EFI enabled hardware, thus it is not possible currently to boot ExectOS on a legacy BIOS.
#### Is ExectOS a Windows replacement?
No. ExectOS is a brand new, modern system designed to run applications written for many different types of Operating
Systems. This allows to implement any environment subsystem to support applications that are strictly written to the
corresponding standard (eg. DOS, or POSIX). This means that running Windows applications might be as well possible at
some time. However development is mostly focused on providing system core at the moment.
#### Is ExectOS another Unix based OS?
No. ExectOS implements the XT architecture which derives from NT&trade; architecture. It is modular, and consists of
two main layers: microkernel and user mode. 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&trade;, 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.
#### Does ExectOS allow to use Windows drivers?
This is one of our goals. Thanks to the NT&trade; drivers compatibility layer provided by ExectOS, you should be able to
install and use the same drivers as you can on Windows&reg;.
#### Can I install ExectOS on a pendrive / USB stick?
Yes. This is how it is tested on a bare metal (real hardware).
#### Program X does not work when I launch it. When can I except things to change?
It depends. ExectOS is in early development stage and it is not recommended for everyday usage. At this point we cannot
guarantee anything.
#### When will feature X get added?
If you think an idea has merit, you may choose to discuss it on [Discord Server](https://discord.com/invite/zBzJ5qMGX7).
However, the best way to get a feature added to ExectOS is to implement it yourself.
#### When will the project be finished?
Writing an Operating System is a complex task that requires time. Other popular Operating Systems, such as Linux, are
also constantly being developed to meet the everyday users requirements.
#### Where can I obtain the source code?
ExectOS source code can be obtained from GIT repository available [here](https://git.codingworkshop.eu.org/xt-sys/exectos).
It can be also found on [GitHub](https://github.com/xt-sys/exectos) and [GitLab](https://gitlab.com/xt-sys/exectos) mirrors.
#### Where can I download ExectOS?
Each ExectOS build, including binaries, disk image, libraries and debug symbols are available [here](https://artifacts.codingworkshop.eu.org/ExectOS/).
#### How can I contribute to ExectOS?
We are looking for C and Assembler developers for core OS development as well as testers. If you are willing to help,
please join our [Discord server](https://discord.com/invite/zBzJ5qMGX7) and contact one of ExectOS developers.
#### Why don't you use GCC?
Because GCC is a crap.
#### Do you have any kind of tests to check if the code is working as expected?
We don't need tests. If it compiles, it is good enough; if it boots up, then it is perfect.
#### Why don't you help Wine?
Wine implements Win32Api only, while ExectOS is a featureful Operating System, that implements a compatibility layer with
NT&trade;. This means, ExectOS will be able to run NT&trade; drivers as well, not only Windows&reg; software. However, thanks
to its modular design, it will be possible to implement Win32 subsystem as well at some point, based on Wine.
#### Why don't you help ReactOS?
ExectOS goals are very different from ReactOS, and contrast the project's core philosophy as being quite on different paths.
While ReactOS aims to replicate Windows&reg; NT&trade;, ExectOS is a completely new Operating System implementing the XT
architecture which derives from NT&trade;. Although both projects share the goal of being NT&trade; compatible, they intend
to achieve it in different ways. What ReactOS tries to replicate, ExectOS only implements as a compatibility layer. Thanks
to that, ExectOS does not need to strictly follow NT&trade; architecture and is capable of providing modern features.
#### Do you intend to cooperate with ReactOS to achieve common goals?
No. We share Wine's opinion on the inappropriate reverse-engineering methods used in the ReactOS project, as well as its
association with the TinyKrnl project, which used every possible method of achieving the end result of having a 100%
compatible results. This especially applies to the so-called dirty way.
#### Which license does ExectOS use?
ExectOS is licensed under the GNU General Public License v3.

11
content/source-code.md Normal file
View File

@ -0,0 +1,11 @@
+++
title = 'Source Code'
date = 2024-06-16T22:36:47+02:00
+++
### ExectOS
* Main GIT repository: https://git.codingworkshop.eu.org/xt-sys/exectos
* GitHub Mirror: https://github.com/xt-sys/exectos
### XTChain
* Main GIT repository: https://git.codingworkshop.eu.org/xt-sys/xtchain
* GitHub Mirror: https://github.com/xt-sys/xtchain

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -0,0 +1,3 @@
module:
hugoVersion:
min: "0.84.0"

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
{{- partial "head.html" . -}}
<body>
{{- partial "header.html" . -}}
<div class="wrapper_content">
<div class="content">
{{- block "main" . }}{{- end }}
</div>
</div>
{{- partial "footer.html" . -}}
</body>
</html>

View File

@ -0,0 +1,9 @@
{{ define "main" }}
<h2>{{ .Title }}</h2>
{{ range .Pages.ByPublishDate.Reverse }}
<h3><a class="title" href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<a class="summary" href="{{ .RelPermalink }}">
<p>{{ .Summary }}</p>
</a>
{{ end }}
{{ end }}

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
{{- partial "head.html" . -}}
<body>
{{- partial "header.html" . -}}
<div id="content">
{{- block "main" . }}{{- end }}
</div>
{{- partial "footer.html" . -}}
{{- partial "script.html" . -}}
</body>
</html>

View File

@ -0,0 +1,5 @@
{{ define "main" }}
<h2>{{ .Title }}</h2>
{{ .Content }}
<br /><br />
{{ end }}

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
{{- partial "head.html" . -}}
<body>
{{- partial "header.html" . -}}
<div class="wrapper_content">
<div class="content">
{{ .Content }}
</div>
</div>
{{- partial "footer.html" . -}}
</body>
</html>

View File

@ -0,0 +1,10 @@
<div class="wrapper_footer">
<div class="footer">
<div class="footer-left">
Copyright&copy; 2017 - 2024, CodingWorkshop
</div>
<div class="footer-right">
Content is available under <a href="https://www.gnu.org/licenses/fdl-1.3.html">GNU Free Documentation License 1.3 or later</a>.
</div>
</div>
</div>

View File

@ -0,0 +1,9 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.png" />
<link rel="stylesheet" type="text/css" href="/css/style.css">
<meta http-equiv="Content-type" content="application/xhtml+xml;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title>{{ $title := print .Site.Title " | " .Title }}{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}{{ $title }}</title>
</head>

View File

@ -0,0 +1,19 @@
<div class="wrapper_header">
<div class="header">
<h1><a href="{{ .Site.BaseURL }}"><img src="/images/exectos_logo.png" alt="LOGO" width="50px" /> {{ .Site.Title }}</a></h1>
<ul>
{{ range .Site.Menus.main }}
{{ if .HasChildren }}
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ .Name }}<span class="caret"></span></a>
<ul class="dropdown-menu">
{{ range .Children }}
<li><a href="{{ .URL }}">{{ .Pre }}{{ .Name }}{{ .Post }}</a></li>
{{ end }}
</ul>
{{ else }}
<li><a href="{{ .URL }}">{{ .Pre }}<b>{{ $text := print .Name | safeHTML }}{{ $text }}{{ .Post }}</b></a></li>
{{ end }}
{{ end }}
</ul>
</div>
</div>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,239 @@
@import url("/css/fontawesome-min.css");
@font-face {
font-family : 'Source Sans Pro';
font-style : normal;
font-weight : 400;
src : url('/fonts/source-sans-pro-v9-latin-regular.eot');
src : local('Source Sans Pro'), local('SourceSansPro-Regular'),
url('/fonts/source-sans-pro-v9-latin-regular.eot?#iefix') format('embedded-opentype'),
url('/fonts/source-sans-pro-v9-latin-regular.woff2') format('woff2'),
url('/fonts/source-sans-pro-v9-latin-regular.woff') format('woff'),
url('/fonts/source-sans-pro-v9-latin-regular.ttf') format('truetype');
}
@font-face {
font-family : 'Source Sans Pro';
font-style : italic;
font-weight : 400;
src : url('/fonts/source-sans-pro-v9-latin-italic.eot');
src : local('Source Sans Pro Italic'), local('SourceSansPro-It'),
url('/fonts/source-sans-pro-v9-latin-italic.eot?#iefix') format('embedded-opentype'),
url('/fonts/source-sans-pro-v9-latin-italic.woff2') format('woff2'),
url('/fonts/source-sans-pro-v9-latin-italic.woff') format('woff'),
url('/fonts/source-sans-pro-v9-latin-italic.ttf') format('truetype');
}
@font-face {
font-family : 'Source Sans Pro';
font-style : normal;
font-weight : 700;
src : url('/fonts/source-sans-pro-v9-latin-700.eot');
src : local('Source Sans Pro Bold'), local('SourceSansPro-Bold'),
url('/fonts/source-sans-pro-v9-latin-700.eot?#iefix') format('embedded-opentype'),
url('/fonts/source-sans-pro-v9-latin-700.woff2') format('woff2'),
url('/fonts/source-sans-pro-v9-latin-700.woff') format('woff'),
url('/fonts/source-sans-pro-v9-latin-700.ttf') format('truetype');
}
:root {
color-scheme : light;
}
html {
color : light-dark(#333333, #FFFFFF);
background-color : light-dark(#FFFFFF, #030C12);
margin : 0;
padding : 0;
}
body {
font-family : "Source Sans Pro", "Trebuchet MS", "Verdana", sans-serif;
margin : 0;
padding : 0;
}
code {
color : #186196;
font-weight : bold;
}
h1 {
font-size : 28px;
margin-top : 8px;
padding : 1px;
vertical-align : middle;
}
h2 {
border-bottom : 1px solid #DDDDDD;
font-size : 30px;
margin-left : -1em;
margin-right : -1em;
text-decoration : bold;
}
h3 {
font-size : 18px;
margin-left : -1em;
margin-right : -1em;
text-decoration : bold;
}
img {
border : 0px;
vertical-align : middle;
}
pre {
background-color : #3C3C3C;
border-color : #3D3D3D;
border-radius : 4px;
color : #ECECEC;
display : block;
font-size : 13px;
line-height : 1.42857143;
margin : 0 0 10px;
overflow : auto;
padding : 9.5px;
word-break : break-all;
word-wrap : break-word;
}
pre code {
color : #ECECEC;
font-weight : normal;
}
.content {
font-size : 15px;
margin-left : 30%;
margin-right : 30%;
margin-top : 1.5em;
}
.content img {
border : 0px;
display : block;
margin : auto;
vertical-align : middle;
text-align : center;
}
.content li {
list-style-type : square;
}
.copyright {
color : #404040;
font-family : "Source Sans Pro", "Trebuchet MS", "Verdana", sans-serif;
font-size : 10px;
text-align : center;
text-decoration : none;
}
.copyright a {
color : #404040;
text-decoration : none;
}
.copyright a:hover {
color : #404040;
text-decoration : none;
}
.footer {
background : light-dark(#FFFFFF, #030C12);
color : light-dark(#000000, #FFFFFF);
clear : both;
font-family : sans-serif, verdana, Helvetica;
font-size : 12px;
margin-left : 10px;
margin-top : 0.4em;
padding : 0;
width : 100%
}
.footer-left {
position : absolute;
text-align : left;
width : 50%;
}
.footer-right {
left : 50%;
position : absolute;
text-align : right;
width : 50%;
}
.header {
background : light-dark(#BEE0FF, #2185D0);
border-bottom : 2px solid #186196;
color : #186196;
clear : both;
font-size : 14px;
padding-left : 1em;
padding-top : 1px;
text-align : center;
vertical-align : middle;
}
.header a {
color : light-dark(#186196, #CCCCCC);
padding-left : 5px;
padding-right : 5px;
padding-top : 1px;
text-decoration : none;
}
.header a:hover {
color : light-dark(#000055, #FFFFFF);
padding-left : 5px;
padding-right : 5px;
padding-top : 1px;
}
.header img {
margin : 0px;
padding : 0px;
}
.header li {
display : inline;
margin-left : 2em;
}
.header ul {
margin : 0px;
padding : 0px;
text-align : center;
}
.wrapper_content {
margin-bottom : 2.5em;
padding : 6em 0 0 0;
}
.wrapper_header {
background : light-dark(#FFFFFF, #030C12);
color : light-dark(#000000, #FFFFFF);
height : 6em;
left : 0;
position : absolute;
position : fixed;
top : 0;
width : 100%;
}
.wrapper_footer {
background : light-dark(#FFFFFF, #030C12);
border-top : 2px solid #186196;
bottom : 0;
color : #000000;
height : 1.5em;
left : 0;
position : absolute;
position : fixed;
width : 100%
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

10
themes/exectos/theme.toml Normal file
View File

@ -0,0 +1,10 @@
name = "ExectOS"
license = "GPLv3"
licenselink = "https://www.gnu.org/licenses/gpl-3.0.html"
description = "ExectOS Theme"
homepage = "https://exectos.eu.org"
languageCode = "en-us"
min_version = "0.1.0"
[author]
name = "Rafal Kupiec"