<?xml version="1.0" encoding="UTF-8" ?>
  <feed xmlns="http://www.w3.org/2005/Atom">
     <title type="html">Amlal El Mahrouss - C++ and CS.</title>
     <id>https://amlal.nekernel.org/rss</id>
     <link href="https://amlal.nekernel.org/rss" rel="self" type="application/atom+xml"/>
     <link href="https://amlal.nekernel.org/" rel="alternate" type="text/html"/>
     <subtitle>Systems Design, Computer Science, Mathematics, and C++.</subtitle>
     <entry>
          <title type="html">The GenericsLibrary, Part Three.</title>
          <link href='https://amlal.nekernel.org/blog/generics-library-3' />
          <published>2026-04-09</published>
	  <id>https://amlal.nekernel.org/blog/generics-library-3</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/generics-library-3"><![CDATA[ <h2>Expanding the GL:</h2>
<p>One may acheive that using the preprocessor at best, and if not possible the compiler.</p>
<p>The idea is to avoid touching too much on the frontend. That would introduce software bloat and instability.</p>
<h2>Examples (from Ne.app&#39; Visual Nectar):</h2>
<pre><code class="language-rust">#include &lt;GenericsLibrary/io.nhh&gt;
#include &lt;GenericsLibrary/std.nhh&gt;

let main() {
    async {
        try {
            writefn(&quot;%s&quot;, &quot;Hello, World!\n&quot;);
        }
        except {
            // if it doesn&#39;t go through, abort program.
            abort();
        }
    } await {
        // While awaiting, execute code.
    }
}
</code></pre>
<p>It is simple to read, and the user can roll its own implementation.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The GenericsLibrary, Part Two.</title>
          <link href='https://amlal.nekernel.org/blog/generics-library-2' />
          <published>2026-03-24</published>
	  <id>https://amlal.nekernel.org/blog/generics-library-2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/generics-library-2"><![CDATA[ <h2>The GenericsLibrary of Nectar: Part Two.</h2>
<h2>Principles of the GL:</h2>
<ul>
<li>&#39;Algorithms&#39;</li>
<li>&#39;Containers&#39;</li>
<li>&#39;Traits&#39;</li>
</ul>
<h3>The Algorithms have to be generic and fit-it-all:</h3>
<p>The following implementation implements and iterator in a generic algorithmic way.</p>
<pre><code class="language-rust">impl iterator : trait iterator_traits
{
    let begin(let self)
    {
	    must_pass(self._begin != self._end);
	
        let begin := self._begin;
        return begin;
    }

    let end(let self)
    {
	    must_pass(_begin != _end);
	
        let end := self._end;
        return end;
    }

    let size(let self)
    {
	    must_pass(self._size &gt; 0);
        return self._size;
    }
};
</code></pre>
<p>Here you don&#39;t have to know what it does exactly, you can just plug it in every type that conforms to <code>iterator_traits</code>.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The GenericsLibrary, Part One.</title>
          <link href='https://amlal.nekernel.org/blog/generics-library' />
          <published>2026-03-23</published>
	  <id>https://amlal.nekernel.org/blog/generics-library</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/generics-library"><![CDATA[ <h2>The GenericsLibrary of Nectar: Part One.</h2>
<h2>Principles of the GL:</h2>
<ul>
<li>&#39;Algorithms&#39;</li>
<li>&#39;Containers&#39;</li>
<li>&#39;Traits&#39;</li>
</ul>
<p>Or, the ACT library design principle. This series of post will go deep in the principles and implementation of Nectar.</p>
<p>It is recommended you read the primers first.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The NeKernel Architecture Internals #1</title>
          <link href='https://amlal.nekernel.org/blog/nekernel_architecture' />
          <published>2026-03-14</published>
	  <id>https://amlal.nekernel.org/blog/nekernel_architecture</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/nekernel_architecture"><![CDATA[ <p>This articles gives as much information as possible in order for developers to work on contribute on NeKernel&#39;s architecture.</p>
<h2>Figure 1: The Architecture.</h2>
<p><img src="../../../public/nekernel_architecture.png" alt=""></p>
<h2>The Notes:</h2>
<ul>
<li>LibDDK sits between the kernel and userspace, as drivers gets loaded by the DDK in either:<ul>
<li>Kernel Space (Privileged mode)</li>
<li>User Space (Unprivileged mode)</li>
</ul>
</li>
<li>BootZ is the modular bootloader for NeKernel&#39;s architecture. In an embedded system this is very useful as you may want to habe your own firmware backend instead of the already supported ones (NeBoot, EFI.)</li>
</ul>
<h2>Snippet: <code>BootThread</code> The loader class of BootZ.</h2>
<pre><code class="language-cpp">// SPDX-License-Identifier: Apache-2.0
// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org)
// Licensed under the Apache License, Version 2.0 (see LICENSE file)
// Official repository: https://github.com/ne-foss-org/nekernel

#ifndef BOOTKIT_BOOTTHREAD_H
#define BOOTKIT_BOOTTHREAD_H

#include &lt;FirmwareKit/Handover.h&gt;
#include &lt;KernelKit/MSDOS.h&gt;
#include &lt;KernelKit/PE.h&gt;

namespace Boot {
using namespace Kernel;

class BootThread;

/// @brief Bootloader Thread class.
class BootThread final {
 public:
  explicit BootThread() = delete;
  ~BootThread()         = default;

  explicit BootThread(Kernel::VoidPtr blob);

  BootThread&amp; operator=(const BootThread&amp;) = default;
  BootThread(const BootThread&amp;)            = default;

  Int32       Start(HEL::BootInfoHeader* handover, BOOL is_own_stack);
  void        SetName(const char* name);
  const char* GetName();
  bool        IsValid();

 private:
  Char                 fBlobName[256U] = {&quot;BootThread&quot;};
  VoidPtr              fStartAddress{nullptr};
  VoidPtr              fBlob{nullptr};
  UInt8*               fStack{nullptr};
  HEL::BootInfoHeader* fHandover{nullptr};
};
}  // namespace Boot

#endif
</code></pre>
<h2>Conclusion:</h2>
<p>I hope this article was useful for everyone studying or integrating NeKernel in their project.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The Open C++ Libraries.org Rationale</title>
          <link href='https://amlal.nekernel.org/blog/ocl_v1620' />
          <published>2026-03-05</published>
	  <id>https://amlal.nekernel.org/blog/ocl_v1620</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/ocl_v1620"><![CDATA[ <h2>Design Rationale:</h2>
<p>OCL is a modular set of libraries, all of which must be based on OCL.Core.</p>
<p>As we want to guarantee a base framework for the libraries to understand each other.</p>
<h2>Examples of OCL:</h2>
<p>You may find more examples of OCL&#39;s usage on <a href="https://git.nekernel.org">https://git.nekernel.org</a>.</p>
<pre><code class="language-cpp">/*
 * File: example.cpp
 * Purpose: Rope example.
 * Author: Amlal El Mahrouss (amlal@nekernel.org)
 * Copyright 2025-2026, Amlal El Mahrouss, licensed under the Boost Software License.
 */

#include &lt;ocl/tproc/rope.hpp&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;

#ifndef STANDALONE
using namespace ocl;
#else
using namespace boost;
#endif

int main()
{
	auto rope	  = tproc::crope(&quot;The Quick Brown Fox Jumps Over The Lazy Dog&quot;);
	auto new_elem = std::make_unique&lt;tproc::crope&gt;(&quot;, and Jumps again.&quot;);

	rope.concat(new_elem.get());

	std::cout &lt;&lt; *++rope &lt;&lt; std::endl;
}
</code></pre>
<p>You realize that OCL&#39;s objective is to be as close as possible to the C++ SL. And that&#39;s because it&#39;s much needed for code-bases to be closer to their SL than let&#39;s way adopting other practices that aren&#39;t quite compatible with it.</p>
<h2>What&#39;s next?</h2>
<p>Next we&#39;re going to discuss more about other system design rationales. And possibly some papers I wrote (and still writing).</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">Math Post(s): Part Four</title>
          <link href='https://amlal.nekernel.org/blog/math_post_4' />
          <published>2026-02-28</published>
	  <id>https://amlal.nekernel.org/blog/math_post_4</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/math_post_4"><![CDATA[ <h2>The Good:</h2>
<p>Here&#39;s the good stuff...</p>
<p><img src="/math_post_4.png" alt="/math_post_4.png"></p>
<p>Assume for n &gt; 0, such that n != +inf.</p>
<h2>So?</h2>
<p>That&#39;s it. I&#39;ll be writting about Open C++ Libraries next time.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">Math Post(s): Part Three</title>
          <link href='https://amlal.nekernel.org/blog/math_post_3' />
          <published>2026-02-26</published>
	  <id>https://amlal.nekernel.org/blog/math_post_3</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/math_post_3"><![CDATA[ <h2>The Contents:</h2>
<p><img src="/math_post_3.png" alt="/math_post_3.png">
<img src="/math_post_3_1.png" alt="/math_post_3_1.png"></p>
<h2>Yeah.</h2>
<p>That&#39;s it.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">MathPost(s): Part One</title>
          <link href='https://amlal.nekernel.org/blog/math_post_1' />
          <published>2026-02-21</published>
	  <id>https://amlal.nekernel.org/blog/math_post_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/math_post_1"><![CDATA[ <p>I want to share a sum after I&#39;ve been reading some topology work.</p>
<p>So I made a math post :)</p>
<h2>Figure 1:</h2>
<img width="50%" src="/math_post_1.png"/> ]]></content>
        </entry>
<entry>
          <title type="html">MathPost(s): Part Two</title>
          <link href='https://amlal.nekernel.org/blog/math_post_2' />
          <published>2026-02-21</published>
	  <id>https://amlal.nekernel.org/blog/math_post_2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/math_post_2"><![CDATA[ <p>Here&#39;s another one I thought out of the blue after reading some works.</p>
<p>So I made a math post :)</p>
<h2>Figure 1:</h2>
<img width="50%" src="/math_post_2.png"/> ]]></content>
        </entry>
<entry>
          <title type="html">Sharing a Lib: Canvas_Ity</title>
          <link href='https://amlal.nekernel.org/blog/sharing_a_lib_1' />
          <published>2026-02-21</published>
	  <id>https://amlal.nekernel.org/blog/sharing_a_lib_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/sharing_a_lib_1"><![CDATA[ <p>Just wanted to share this lib I found on HN: <a href="https://github.com/a-e-k/canvas_ity">https://github.com/a-e-k/canvas_ity</a>, looks great so far.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The TProc Library: A Simple Example (Part I)</title>
          <link href='https://amlal.nekernel.org/blog/the_tproc_library' />
          <published>2026-02-02</published>
	  <id>https://amlal.nekernel.org/blog/the_tproc_library</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/the_tproc_library"><![CDATA[ <h1>Abstract</h1>
<p>The TProc Library uses the Rope structure—as defined in its similarly named paper.
We will in this blog post study its implementation through OCL&#39;s TProc.</p>
<h2>Introduction</h2>
<p>Let us walk through the TProc library in a structured manner.</p>
<h2>Definition of a TProc Example:</h2>
<p>Let the following C++ source:</p>
<pre><code class="language-cpp">/*
 * File: example.cpp
 * Purpose: Rope example.
 * Author: Amlal El Mahrouss (amlal@nekernel.org)
 * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License.
 */

#include &lt;ocl/tproc/rope.hpp&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;

#ifndef STANDALONE
using namespace ocl;
#else
using namespace boost;
#endif

int main()
{
	auto rope = tproc::crope(&quot;The Quick Brown Fox Jumps Over The Lazy Dog&quot;);
	auto new_elem = std::make_unique&lt;tproc::crope&gt;(&quot;, and Jumps again.&quot;);
	
	rope.concat(new_elem.get());

	std::cout &lt;&lt; *++rope &lt;&lt; std::endl;
}
</code></pre>
<h3>Three things are done:</h3>
<ul>
<li>&#39;rope&#39; has ownership of &#39;new_elem&#39;.</li>
<li>calling &#39;std::cout&#39; (or any &#39;std::ostream&#39; really.) on rope will return the complete rope string of rope.</li>
<li>The data structure is O(log n)—which makes it perfect for text processing applications.</li>
</ul>
<h3>What this solves:</h3>
<p>The following is addresed in TProc:</p>
<ul>
<li>Text manipulation.</li>
<li>Performance aware programs.</li>
</ul>
<h3>Conclusion:</h3>
<p>The TProc is free-software, available at: ocl.nekernel.org. On both GitHub and Codeberg.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The General Harvard Separation Axiom (Execution Semantics Theory)</title>
          <link href='https://amlal.nekernel.org/blog/ghs-axiom' />
          <published>2026-01-21</published>
	  <id>https://amlal.nekernel.org/blog/ghs-axiom</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/ghs-axiom"><![CDATA[ <h2>Properties:</h2>
<p>Let <code>G</code> be a theory that formally defines execution semantics (domains, contexts, authority).
Let <code>O</code> be any theory of computational behavior.</p>
<ul>
<li>If <code>O</code> models computation, then <code>O</code> requires execution to occur.</li>
<li>Therefore <code>O</code> implicitly depends on <code>G</code>&#39;s primitives (execution must be defined for computation to be theorized).</li>
<li><code>G</code> does not depend on <code>O</code> (execution semantics are primitive, not derived from computational models).</li>
</ul>
<h2>Conclusion:</h2>
<p>We cannot derive <code>G</code> from <code>O</code> without circularity:</p>
<ul>
<li>Deriving execution semantics from <code>O</code> would mean &quot;execution depends on a theory that assumes execution exists&quot;</li>
<li>This creates an impossible circular dependency</li>
<li>Therefore <code>G</code> must be <strong>axiomatic</strong> - a foundational primitive that cannot be reduced to other computational theories</li>
</ul>
<p>Any attempt to make <code>G = O</code> or <code>G ⊆ O</code> fails because <code>O</code> already assumes <code>G</code>&#39;s primitives exist.</p>
<h3>Author:</h3>
<ul>
<li>Amlal El Mahrouss - <a href="mailto:amlal@nekernel.org">amlal@nekernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">The GenericsLibrary: Additional notes of the Nectar Primer.</title>
          <link href='https://amlal.nekernel.org/blog/nectar_primer_2' />
          <published>2026-01-20</published>
	  <id>https://amlal.nekernel.org/blog/nectar_primer_2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/nectar_primer_2"><![CDATA[ <h2>Abstract:</h2>
<p>The <code>Nectar</code> is a programming language that supports generics through its <code>GenericsLibrary</code>.
The <code>GenericsLibrary</code> provides a set of abstractions and utilities to define and manipulate generic types and functions.</p>
<h3>Possible Implementation of <code>N</code> in Nectar:</h3>
<pre><code class="language-csharp">
impl N
{
    let init()
    {
        return;
    }

    let dispose()
    {
        return;
    }

    let begin(let it)
    {
        let end := it._begin;
        return end;
    }

    let end(let it)
    {
        let end := it._begin;
        end += it._end;

        return end;
    }

    let size(let it)
    {
        let sz := it._size;
        return sz;
    }
};
</code></pre>
<h2>Properties of <code>N</code> and <code>Y</code>:</h2>
<p>Let <code>Y</code> be a set of types with specific properties.
Let <code>N</code> be an object mapping functors to <code>Y</code> properties.</p>
<ul>
<li><code>N</code> Shall provide functions to manipulate <code>Y</code> generically.</li>
<li><code>N</code> May be extended to support additional <code>Y</code> types and properties.</li>
</ul>
<p>Let <code>N(m)</code> denote the instantiation of <code>N</code> for a specific <code>Y</code> type.</p>
<ul>
<li><code>N(m)</code> Shall be defined for all <code>Y</code> types <code>m</code> that satisfy the required properties</li>
</ul>
<h3>Author:</h3>
<ul>
<li>Amlal El Mahrouss - <a href="mailto:amlal@nekernel.org">amlal@nekernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">Execution Authority Theory.</title>
          <link href='https://amlal.nekernel.org/blog/execution_authority' />
          <published>2026-01-15</published>
	  <id>https://amlal.nekernel.org/blog/execution_authority</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/execution_authority"><![CDATA[ <h1>Attention</h1>
<p>The Theory is now available at <a href="https://nekernel.org/papers/index.html">NeKernel.org</a>.</p>
<h2>Abstract:</h2>
<p>An execution domain is defined as previously stated <a href="/blog/execution_domain">here</a>.</p>
<p>An execution authority is responsible for defining whose semantics may be used for an <a href="/blog/execution_domain">execution context</a>. </p>
<p>A trait is a set of formal rules defining the semantic concepts of an execution context.</p>
<p>Let <code>A</code> be an execution authority of type <code>T</code> where <code>T</code> is an traits of an execution context.</p>
<h2>Properties:</h2>
<p>Let <code>C</code> denote an execution domain in an execution context <code>E</code>.
Let <code>Z</code> denote an execution domain in an execution context <code>X</code>.</p>
<ul>
<li>If <code>X</code> does not equal or is not semantically substitutable with <code>Z</code> -- or vice versa. Then <code>C</code> shall not equal to <code>Z</code>.</li>
<li>If <code>Z</code> or <code>C</code> are defined as null execution context, then the said context -- defined as <code>N</code> is not equal to (!<code>N</code>).</li>
</ul>
<h3>Author:</h3>
<ul>
<li>Amlal El Mahrouss - <a href="mailto:amlal@nekernel.org">amlal@nekernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">NeKernel.org: v115.</title>
          <link href='https://amlal.nekernel.org/blog/release-v115' />
          <published>2026-01-15</published>
	  <id>https://amlal.nekernel.org/blog/release-v115</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/release-v115"><![CDATA[ <h2>Abstract</h2>
<p>A new version of NeKernel.org has been released. The sources are available on GitHub and Codeberg.</p>
<p>Check it out: <a href="nekernel.org">nekernel.org</a></p>
<h2>On the Primers</h2>
<p>A new category have been added on the website as well -- they contain the primers -- and additional resources you&#39;d need to understand and build on nekernel.</p>
<h2>Screenshots</h2>
<img width="50%" src="/new_site.png"/> ]]></content>
        </entry>
<entry>
          <title type="html">Execution Domains Theory.</title>
          <link href='https://amlal.nekernel.org/blog/execution_domain' />
          <published>2026-01-14</published>
	  <id>https://amlal.nekernel.org/blog/execution_domain</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/execution_domain"><![CDATA[ <h1>Attention</h1>
<p>The Theory is now available at <a href="https://nekernel.org/papers/index.html">NeKernel.org</a>.</p>
<h2>Abstract:</h2>
<p>An execution domain defines a boundary for execution semantics, resource visibility, and control flow.</p>
<p>Let <code>C</code> denote an execution domain in an execution context <code>E</code>.</p>
<p>Let <code>D</code> be of same type of <code>C</code> but of a different execution context.</p>
<h2>Properties:</h2>
<ul>
<li><code>C</code> shall be not equal to <code>D</code>, as <code>C</code> has a different execution context than <code>D</code>.</li>
<li><code>C</code> may be composed of sub-programs within the execution context <code>E</code>.</li>
</ul>
<h2>On Execution Contexts:</h2>
<p>Execution contexts are treated as abstract semantic parameters, and execution domains as abstract structures indexed by those parameters.</p>
<h3>Author:</h3>
<ul>
<li>Amlal El Mahrouss - <a href="mailto:amlal@nekernel.org">amlal@nekernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">The Nectar Programming Language - A Primer (1)</title>
          <link href='https://amlal.nekernel.org/blog/nectar_primer_1' />
          <published>2026-01-09</published>
	  <id>https://amlal.nekernel.org/blog/nectar_primer_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/nectar_primer_1"><![CDATA[ <h1>The Nectar Programming Language - A Primer (1)</h1>
<h1>Attention</h1>
<p>The Nectar Primer is now available at <a href="https://nekernel.org/nectar_primer">NeKernel.org</a>.</p>
<h2>Abstract</h2>
<p>This blog will lead you through the basics of the Nectar programming language, its features, and its use cases.</p>
<h3>Nectar by example: Main Function</h3>
<p>As of right now, a simple Nectar program looks like this:</p>
<pre><code>import nstd::iostream;

let main()
{
    let six_seven = 100;
    let eight_nine = 1;
    iostream{}.consume(1, 67);

    return 0;
}
</code></pre>
<h3>Nectar by Example: Structure</h3>
<p>Nectar supports user-defined structures, allowing you to create complex data types easily.</p>
<pre><code>struct iostream
{
    type &lt;class Tp_&gt;
    let consume(Tp_&amp; val)
    {
        printf(&quot;%p&quot;, val);
    }
    
    let read()
    {
        return getchar();
    }
};

let shared_io()
{
	let io := new;
    io := iostream{};
	return io;
}
</code></pre>
<p>Nectar is designed with simplicity and safety in mind.</p>
<h2>Use Cases of Nectar:</h2>
<ul>
<li><strong>Real-time Applications</strong></li>
<li><strong>Telecommunications</strong></li>
<li><strong>Financial Systems</strong></li>
</ul>
<h3>Implementation</h3>
<p>The implementation of Nectar is open-source and can be found on GitHub: <a href="https://github.com/nekernel-org/nectar">Nectar Language Repository</a>.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">The NeKernel System - A Primer (1)</title>
          <link href='https://amlal.nekernel.org/blog/nekernel_primer_1' />
          <published>2026-01-09</published>
	  <id>https://amlal.nekernel.org/blog/nekernel_primer_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/nekernel_primer_1"><![CDATA[ <h1>The NeKernel System - A Primer (1)</h1>
<h1>Attention</h1>
<p>The NeKernel Primer is now available at <a href="https://nekernel.org/nekernel_primer">NeKernel.org</a>.</p>
<h2>Abstract</h2>
<p>This blog will lead you through the basics of the NeKernel operating system, its architecture, and its use cases.</p>
<h3>NeKernel by example: The Systems Architecture</h3>
<p>NeKernel is designed with a modular architecture that allows for easy customization and scalability. The core components include:</p>
<ul>
<li><strong>Microkernel</strong>: Handles low-level tasks such as memory management, process scheduling, and inter-process communication.</li>
<li><strong>User Space</strong>: Contains user applications and services that run on top of the microkernel.</li>
<li><strong>Device Drivers</strong>: Modular drivers that can be loaded and unloaded as needed, providing support for various hardware components.</li>
</ul>
<h3>NeKernel by example: The ErrorOr monad</h3>
<p>One of the key features of NeKernel is its robust error handling mechanism using the <code>ErrorOr</code> type. 
This type encapsulates either a successful result or an error, allowing for safer and more predictable code.</p>
<p>Those error codes are defined in the KPC protocol. Which is located at KPC.h</p>
<pre><code class="language-cpp">ErrorOr&lt;PTEWrapper&gt; pteWrapper = Pmm.GrabPage(addr);

if (pteWrapper.HasError())
{
    return /* Your error handling goes there. */
}
</code></pre>
<h2>Uses cases of NeKernel</h2>
<ul>
<li><strong>Base OS</strong>: NeKernel can serve as the foundation for various operating systems, providing a stable and efficient core.</li>
<li><strong>Embedded Systems</strong>: Its modular design makes it suitable for embedded systems where resources are limited</li>
<li><strong>Research and Development</strong>: NeKernel&#39;s open architecture allows researchers to experiment with new OS concepts and designs.</li>
</ul>
<h3>Implementation</h3>
<p>The implementation of NeKernel is open-source and can be found on GitHub: <a href="https://github.com/nekernel-org/nekernel">NeKernel System Repository</a>.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">NeKernel.org and OCL.org: Release v1.1.4</title>
          <link href='https://amlal.nekernel.org/blog/release-v114' />
          <published>2026-01-03</published>
	  <id>https://amlal.nekernel.org/blog/release-v114</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/release-v114"><![CDATA[ <h2>OCL.org: v1.1.4:</h2>
<h3>New Libraries:</h3>
<ul>
<li>TProc (Text Processing Library)</li>
</ul>
<h3>Updated Libraries</h3>
<ul>
<li>Core (New APIs and Bug fixes)</li>
<li>FIX (Bug fixes and new API)</li>
</ul>
<h3>Examples</h3>
<h4>The <code>TProc</code> in action:</h4>
<pre><code>	auto rope = ocl::tproc::crope(&quot;The Quick Brown Fox Jumps Over The Lazy Dog&quot;);
	auto it = ocl::tproc::rope::starts_with_pred&lt;ocl::tproc::crope&gt;{&quot;The Quick&quot;}(rope.cbegin(), rope.cend());

	auto it_end = ocl::tproc::rope::ends_with_pred&lt;ocl::tproc::crope&gt;{&quot;Lazy Dog&quot;}(rope.cbegin(), rope.cend());

	ocl::io::println(it_end-&gt;data());
	ocl::io::println(it-&gt;data());

	auto new_elem = new ocl::tproc::crope(&quot;, and Jumps again.&quot;);
	auto ret_elem = rope.concat(new_elem);

	ocl::io::println(ret_elem-&gt;data());
</code></pre>
<h2>NeKernel.org: v0.1.1:</h2>
<h3>New Subsystems:</h3>
<ul>
<li>LaunchKit and the LCP language (NeKernel)</li>
<li>NeLaunch system (NeKernel)</li>
<li>KernelTest framework (NeKernel)</li>
<li>Vettable/Unvettable patterns (NeKernel)</li>
<li>WeafRef/StrongRef patterns (Nectar)</li>
</ul>
<h3>Updated Subsystems:</h3>
<ul>
<li>NeKernel (Bug fixes, unit testing, and improvements)</li>
<li>BootZ (Better memory detection)</li>
<li>libDDK, libSystem (Bug fixes)</li>
<li>Nectar (Bug fixes, unit testing, and coverage testing)</li>
<li>NeBoot (Bug fixes)</li>
<li>NeBuild (Bug fixes, new TOML support)</li>
</ul>
<h5>Websites:</h5>
<ul>
<li>nekernel.org</li>
<li>ocl.nekernel.org</li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">cl.exe 2026.cpp /OUT:2026.dll.</title>
          <link href='https://amlal.nekernel.org/blog/2026-new-year' />
          <published>2026-01-01</published>
	  <id>https://amlal.nekernel.org/blog/2026-new-year</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/2026-new-year"><![CDATA[ <p>Happy new year to everyone!</p>
<p>Best wishes to everyone!!</p>
<p>I will be writing about NeKernel and Open C++ Libraries design in a more frequent manner!</p>
<p>:) Amlal</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">Open C++ Libraries: allocator_op.hpp: Overview</title>
          <link href='https://amlal.nekernel.org/blog/allocator_op_overview' />
          <published>2025-12-12</published>
	  <id>https://amlal.nekernel.org/blog/allocator_op_overview</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/allocator_op_overview"><![CDATA[ <h1>allocator_op.hpp: Overview</h1>
<h2>I: Abstract.</h2>
<p>The pattern is a low-level system allocator designed to handle custom or standard allocators in the C++ programming language.
Available on the Open C++ Libraries, its purpose is to serve custom allocators and pools for C++ developers.</p>
<h2>II: Usages.</h2>
<p>You can only use smart pointers using this type, the rationale is because we&#39;d rather enforce RAII than taking care of deallocation ourselves.
As the allocation operators may be susceptible to memory leaks. </p>
<pre><code>using int_alloc_type = ocl::allocator&lt;int&gt;;

int_alloc_type alloc;
std::shared_ptr&lt;int&gt; ptr = alloc.construct_array&lt;1&gt;();
*ptr = 5;
/// gets freed by the ABI using RAII!
</code></pre>
<h2>III: Conclusion</h2>
<p>I hope this pattern and the <code>Open C++ Libraries</code> will be useful to C++ developers!
The library also includes <code>Hashing</code>, and a separate <code>FIX</code> submodule.
Amlal.</p>
<h2>IV: References</h2>
<ul>
<li><a href="https://github.com/ocl-org/core/blob/develop/include/ocl/allocator_op.hpp">https://github.com/ocl-org/core/blob/develop/include/ocl/allocator_op.hpp</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">BenchKit: Why over-benchmarking hurts more than it helps.</title>
          <link href='https://amlal.nekernel.org/blog/cpp_overbench_1' />
          <published>2025-12-12</published>
	  <id>https://amlal.nekernel.org/blog/cpp_overbench_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_overbench_1"><![CDATA[ <h1>BenchKit: Why over-benchmarking hurts more than it helps.</h1>
<h2>Abstract</h2>
<p>As you may know, I introduced <code>BenchKit</code> a while ago, and it hasn&#39;t been used much since.
We&#39;ll be talking about how doing <code>Premature Benchmarks</code> could slow down your development time.</p>
<h2>I: The Myth of benchmarking everything.</h2>
<p>First things first, you&#39;d have to get a good reason to benchmark in the first place.
There is things that don&#39;t need to be benchmarked, others do however.</p>
<p>I do believe that there&#39;s no rule in finding use cases and they&#39;re context specific.</p>
<h2>II: When to benchmark.</h2>
<p>When you are done with the code, literally. There&#39;s no need to benchmark unfinished code.</p>
<h2>II: When not to benchmark.</h2>
<p>When your code doesn&#39;t do what it does. Why benchmark code that doesn&#39;t do its purpose yet?</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel/blob/develop/src/misc/BenchKit/Chronometer.h">https://github.com/nekernel-org/nekernel/blob/develop/src/misc/BenchKit/Chronometer.h</a></li>
<li><a href="https://github.com/nekernel-org/nekernel/blob/develop/src/misc/BenchKit/HWChronometer.h">https://github.com/nekernel-org/nekernel/blob/develop/src/misc/BenchKit/HWChronometer.h</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">Vettable Pattern: Assess container vettability in C++ (Updated)</title>
          <link href='https://amlal.nekernel.org/blog/cpp_vettable_pattern' />
          <published>2025-12-12</published>
	  <id>https://amlal.nekernel.org/blog/cpp_vettable_pattern</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_vettable_pattern"><![CDATA[ <h1>Vettable Pattern: Assess container vettability in C++ (Updated)</h1>
<h2>I: Abstract</h2>
<p>The <code>Vettable</code> pattern instructs whether a container should be vetted or not, 
It comes of as handy in low-level/systems programming codebases.
This blog post will talk about its usage in NeKernel.</p>
<p>When a vet fails, a fallback shall be provided.
A fallback may be a function pointer or a function wrapper.</p>
<p>Vetting is very efficient when it comes to security and enforcing the software design, 
as it blocks non vettable or vettable containers from being used in some parts, or restricts usage to them.</p>
<h2>Part One: The <code>IsVettable</code> concept.</h2>
<pre><code>template &lt;typename Type, FallbackType OnFallback&gt;
concept IsVettable = requires() {
  { Vettable&lt;Type&gt;::kValue ? TrueResult&lt;Type&gt;::kValue : OnFallback(PropertyResult&lt;Type&gt;::kValue) };
};
</code></pre>
<p>This guarantees that the object is vettable, otherwise the fallback gets called.</p>
<h2>Part Three: The Method of Container Vettability.</h2>
<p>The method of container vettability resides in the need to focus on where failure is critical, 
for example a <code>UserProcess</code> is subject to vetting, whereas an <code>int</code> is not.</p>
<h2>III: Conclusion.</h2>
<p>This simple pattern is easy and flexible, Although it may not fit every need of every project, 
the <code>Vettable</code> pattern is a good start for codebase harderning and the software design stage of a project. 
As it guarantees that rules are being followed in the codebase.</p>
<h3>References:</h3>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel/blob/develop/src/kernel/NeKit/Vettable.h">Vettable.h</a></li>
<li><a href="https://nekernel.org">NeKernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">weak_ref, strong_ref: Reference Holding in C++ (Updated)</title>
          <link href='https://amlal.nekernel.org/blog/cpp_weak_ref_strong_ref_pattern' />
          <published>2025-12-12</published>
	  <id>https://amlal.nekernel.org/blog/cpp_weak_ref_strong_ref_pattern</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_weak_ref_strong_ref_pattern"><![CDATA[ <h1>weak_ref, strong_ref: Reference Holding in C++ (Updated)</h1>
<h2>I: Abstract</h2>
<p>Nectar has introduced two new primitives for Reference holding, <code>WeakRef</code> and <code>StrongRef</code>.
The idea is to separate references as <code>strong</code> and <code>weak</code> references.</p>
<p>This extends and deprecates the <code>Ref</code> pattern in Nectar.</p>
<h2>II: Principle</h2>
<p>You should be able to hold references to a pointer without having to own it.
That is the purpose of a WeakRef, however the StrongRef does the opposite.
StrongRef mandates that the pointer may be deleted by the class itself to guarantee RAII.</p>
<p>However this is heavily context dependent and shall respect the codebase guidelines and its software design rules.</p>
<h2>Bonus: WeakRef</h2>
<pre><code>WeakRef&lt;AstLeaf&gt; refLeaf{weakAst};
/** usage... */
/** refLeaf is not freed! */
</code></pre>
<h2>Bonus: StrongRef</h2>
<pre><code>StrongRef&lt;DLLLoader&gt; dllRef{dll};
/** usage... */
/** dllRef is freed! */
</code></pre>
<h2>Note: On NonNullRef</h2>
<p><code>NonNullRef</code> shall be a strong reference by default, 
as referencing a weak reference that may be null defeats the purpose of a <code>NonNull</code> container.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nectar/blob/develop/include/CompilerKit/Ref.h">Ref.h</a></li>
<li><a href="https://nekernel.org">NeKernel.org</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">CoreProcessScheduler: Part Five (Finale)</title>
          <link href='https://amlal.nekernel.org/blog/cpp_cps_wg02_5' />
          <published>2025-12-09</published>
	  <id>https://amlal.nekernel.org/blog/cpp_cps_wg02_5</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_cps_wg02_5"><![CDATA[ <h1>WG02: Part Five (Finale)</h1>
<h2>I: Abstract</h2>
<p>The <code>WG02</code> have been available for a while under the &#39;/draft&#39; repository. Contributions are welcome.</p>
<h3>II: Update:</h3>
<p>The NeKernel papers are now available on NeKernel.org under the &#39;/draft&#39; repository.
Multiple Working Groups have been set up for that matter.
Click <a href="https://github.com/nekernel-org/draft">here (https://github.com/nekernel-org/draft)</a> to access the repository.</p>
<h3>III: Purpose:</h3>
<p>The NeKernel papers have originally been written to cover C++ methodology on microkernel architecture, and scheduler architecture.
Future working groups will be organized to continue in this lineage of Systems Research.</p>
<h2>IV: References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel">https://github.com/nekernel-org/nekernel</a></li>
<li><a href="https://github.com/nekernel-org/draft">https://github.com/nekernel-org/draft</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">The SysRoot Pattern: Part Two (Finale)</title>
          <link href='https://amlal.nekernel.org/blog/sysroot_part_2' />
          <published>2025-12-09</published>
	  <id>https://amlal.nekernel.org/blog/sysroot_part_2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/sysroot_part_2"><![CDATA[ <h1>The SysRoot Pattern: Part Two (Finale)</h1>
<h2>Abstract</h2>
<p>There is a reference implementation of the <code>sysroot</code> pattern,
more specifically here <a href="https://github.com/nekernel-org/sysroot">sysroot</a>.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/sysroot">https://github.com/nekernel-org/sysroot</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">auto_cast: Automatic type casting in C++</title>
          <link href='https://amlal.nekernel.org/blog/auto_cast' />
          <published>2025-12-07</published>
	  <id>https://amlal.nekernel.org/blog/auto_cast</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/auto_cast"><![CDATA[ <h2>I: Abstract</h2>
<p>This posts talks about an idea of mine called <code>auto_cast</code>. <br/>
Which consists of a structure casting a source type <code>T</code> into an automatic type <code>Y</code>. <br/></p>
<p>The container itself is easy to implement in modern C++.
Bear in mind that <code>operator auto</code> is set to be deprecated in future C++ releases. <br/>
As per <a href="https://cplusplus.github.io/CWG/issues/1878.html">https://cplusplus.github.io/CWG/issues/1878.html</a> says.</p>
<h2>II: Replacing <code>operator auto</code>: The case for templates.</h2>
<p>Using the operator, you can cast away <code>decltype(ref)</code> to <code>ret</code>&#39;s type (which is <code>long*</code>).<br/>
That&#39;s the magic behind this class, no need to specify a target type.<br/>
You&#39;d have to do the following:</p>
<pre><code>
int main() {
    auto ref = new long long(1337);
    long* ret = auto_cast&lt;decltype(ref)&gt;{ref};

    /// ...
}
</code></pre>
<p>The source code of auto_cast is available at: <a href="https://godbolt.org/z/dWTac9b35">https://godbolt.org/z/dWTac9b35</a></p>
<h2>III: Conclusion:</h2>
<p>The <code>auto_cast</code> is an interesting idea about <code>automatic casting</code> if I&#39;d give it a name, 
the idea about whether it&#39;s a good idea or not is up to debate though.
And I am open to such debates.</p>
<p>Amlal.</p>
<h2>References</h2>
<ul>
<li><a href="https://cplusplus.github.io/CWG/issues/1878.html">https://cplusplus.github.io/CWG/issues/1878.html</a></li>
<li><a href="https://godbolt.org/z/dWTac9b35">https://godbolt.org/z/dWTac9b35</a></li>
<li><a href="https://cplusplus.github.io/CWG/issues/1670.html">https://cplusplus.github.io/CWG/issues/1670.html</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">CoreProcessScheduler: Part Four</title>
          <link href='https://amlal.nekernel.org/blog/cpp_cps_wg02_4' />
          <published>2025-12-07</published>
	  <id>https://amlal.nekernel.org/blog/cpp_cps_wg02_4</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_cps_wg02_4"><![CDATA[ <h1>WG02: CoreProcessScheduler: The Application Processor System.</h1>
<h2>Abstract</h2>
<p>NeKernel targets multiple cores, thus the need of an Application Processors Subsystem.</p>
<h3>Methodology: The APS architecture.</h3>
<p>A few possibilites with that architecture:
    - Map cores to a HW Thread structure, A C++ structure.
    - Make it run our task when it is registered by <code>mp_register_task</code>
    - We keep the thread ID from the HTS (HardwareThreadScheduler) inside the HW Thread.
    - And we plug that into the higher level of the scheduler architecture.</p>
<p>This way the design is modular, easy to extend, and easily debuggable.</p>
<h3>Implementation: <code>mp_register_task</code> C++ function.</h3>
<pre><code>EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid);
</code></pre>
<h3>Rationale: Meta-scheduling.</h3>
<p>Meta-scheduling governs how scheduling backends run tasks using a common protocol shared among them.
In this case CPS shares the protocol for <a href="https://github.com/nekernel-org/nekernel/blob/develop/src/kernel/KernelKit/UserProcessScheduler.h">UPS</a> and <a href="https://github.com/nekernel-org/nekernel/blob/develop/src/kernel/KernelKit/KernelTaskScheduler.h">KTS</a>.</p>
<p>The APS makes task scheduling and affinity much easier to implement, 
thanks to <a href="https://doi.org/10.5281/zenodo.18396282">Methodology of Freestanding Development</a> as well, we can make it safer and more maintable in the long run.</p>
<h2>References:</h2>
<ul>
<li><a href="https://doi.org/10.5281/zenodo.18396282">Methodology of Freestanding Development</a></li>
<li><a href="https://github.com/nekernel-org/nekernel">NeKernel</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">The SysRoot Pattern: Part One (Updated)</title>
          <link href='https://amlal.nekernel.org/blog/sysroot_part_1' />
          <published>2025-12-07</published>
	  <id>https://amlal.nekernel.org/blog/sysroot_part_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/sysroot_part_1"><![CDATA[ <h1>The SysRoot Pattern: Part One</h1>
<h2>Abstract</h2>
<p>Acting as the software distribution for NeKernel. this was developed to hold the its components and sysroot altogether. </p>
<h3>The SysRoot Rationale:</h3>
<p>There is three main reasons for this repository&#39;s existence:</p>
<ul>
<li>Hold the codebase in a single repository, which is way more maintnable than a fragmented one.</li>
<li>Easier path resolutions based on a virtual root path, i.e (../kernel -&gt; /src/kernel)</li>
<li>Make releases cycle easier to document and deploy than before.</li>
</ul>
<h3>Why a SysRoot?</h3>
<p>There is two reasons for a sysroot architecture:</p>
<ul>
<li>We avoid deployment scattering.</li>
<li>Easier tooling can be written for such repositories. e.g: <code>checkpath.py</code>, <code>mkfs.py</code>.</li>
</ul>
<h3>Conclusion:</h3>
<p>A SysRoot architecture guarantees a sound and verifiable architecture for embedded and general software systems.
Use it wisely to prepare software deployments.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">CoreProcessScheduler: Part One</title>
          <link href='https://amlal.nekernel.org/blog/cpp_cps_wg02_1' />
          <published>2025-12-05</published>
	  <id>https://amlal.nekernel.org/blog/cpp_cps_wg02_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_cps_wg02_1"><![CDATA[ <h1>WG02: CoreProcessScheduler: Introduction</h1>
<h2>Abstract</h2>
<p>Because NeKernel needs a stable and clean scheduling model, to let us expand it to other goals.</p>
<h3>The Idea:</h3>
<p>It consists of multiple concepts modularized in the <a href="https://github.com/nekernel-org/nekernel">GitHub Organization</a>
look for HardwareThreadScheduler, ThreadLocalStorage, CoreProcessScheduler, and UserProcessScheduler inside KernelKit.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel">https://github.com/nekernel-org/nekernel</a></li>
<li><a href="https://github.com/nekernel-org/draft">https://github.com/nekernel-org/draft</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">CoreProcessScheduler: Part Two</title>
          <link href='https://amlal.nekernel.org/blog/cpp_cps_wg02_2' />
          <published>2025-12-05</published>
	  <id>https://amlal.nekernel.org/blog/cpp_cps_wg02_2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_cps_wg02_2"><![CDATA[ <h1>WG02: CoreProcessScheduler: The Process Balancing system</h1>
<h2>Abstract</h2>
<p>Some processes require more CPU time than others.
Over time, balancing these demands improves overall system responsiveness and efficiency.</p>
<h3>Methodology: Process Time and Run Time.</h3>
<p>The scheduler adjusts a process&#39;s <code>PTime</code> (Process Time) using its <code>RTime</code> (Run Time). If a process runs more than its allotted share, the system modifies both <code>PTime</code> and <code>RTime</code>, and adjusts the process&#39;s affinity accordingly.</p>
<p>UPDATE: A new variable UTime (Usage time) has been introduced to track the total time a process has been running, which helps in determining how much CPU time it should receive next.</p>
<h3>Example: C++ Code based on real NeKernel code.</h3>
<p>Taken from the <a href="https://github.com/nekernel-org/nekernel/commit/58d2af14429be02b580cde5b3e23978530d8ab74"><code>develop</code> branch commit 58d2af1</a>:</p>
<pre><code>if (UserProcessHelper::CanBeScheduled(process)) {
  /// ...
  
  if (UserProcessHelper::Switch(process.StackFrame, process.ProcessId)) {
    process.PTime = static_cast&lt;Int32&gt;(process.Affinity);

    if (process.PTime &lt; process.RTime &amp;&amp; AffinityKind::kRealTime != process.Affinity) {
      if (process.RTime &lt; (Int32) AffinityKind::kVeryHigh)
        process.RTime += (Int32) AffinityKind::kLowUsage;
      else if (process.RTime &lt; (Int32) AffinityKind::kHigh)
        process.RTime += (Int32) AffinityKind::kStandard;
      else if (process.RTime &lt; (Int32) AffinityKind::kStandard)
        process.RTime += (Int32) AffinityKind::kHigh;

      process.PTime -= process.RTime;
      process.RTime = 0UL;
    }
  }
} else {
  ++process.RTime;
  --process.PTime;
}
</code></pre>
<h3>Conclusion</h3>
<p>This logic dynamically adapts the execution privileges of each process to avoid starvation and ensure real-time constraints are met, while still maintaining fairness across system workloads.
The CPS&#39;s balancing design reflects the need to handle processes needs accordingly, no process is created equal, and that&#39;s a big assumption in the UPS&#39;s architecture.</p>
<p>Amlal.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel">https://github.com/nekernel-org/nekernel</a></li>
<li><a href="https://github.com/nekernel-org/draft">https://github.com/nekernel-org/draft</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">CoreProcessScheduler: Part Three</title>
          <link href='https://amlal.nekernel.org/blog/cpp_cps_wg02_3' />
          <published>2025-12-05</published>
	  <id>https://amlal.nekernel.org/blog/cpp_cps_wg02_3</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_cps_wg02_3"><![CDATA[ <h1>WG02: CoreProcessScheduler: Final Distribution</h1>
<h2>Abstract</h2>
<p>I&#39;ve written a new TeX document describing the <a href="/wg02.pdf"><code>CoreProcessScheduler</code></a> system in detail.
It helps understanding NeKernel system internals.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel">https://github.com/nekernel-org/nekernel</a></li>
<li><a href="https://github.com/nekernel-org/draft">https://github.com/nekernel-org/draft</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">C++ for Kernel Development: Part Four</title>
          <link href='https://amlal.nekernel.org/blog/cpp_kernel_part_4' />
          <published>2025-12-05</published>
	  <id>https://amlal.nekernel.org/blog/cpp_kernel_part_4</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_kernel_part_4"><![CDATA[ <h1>Methodology of Freestanding Development: Part Four: Draft Repository. (Finale)</h1>
<h2>Abstract</h2>
<p>The <code>WG01</code> have been available for a while under the <code>draft</code> repository. Contributions are welcome.</p>
<h3>Update:</h3>
<p>The NeKernel papers are now available on NeKernel.org under the <code>draft</code> repository.
Multiple Working Groups have been set up for that matter.
Click <a href="https://github.com/nekernel-org/draft">here (https://github.com/nekernel-org/draft)</a> to access the repository.</p>
<h3>Purpose:</h3>
<p>The NeKernel papers have originally been written to cover C++ methodology on microkernel architecture, and scheduler architecture.
Future working groups will be organized to continue in this lineage of Systems Research.</p>
<h2>References</h2>
<ul>
<li><a href="https://github.com/nekernel-org/nekernel">https://github.com/nekernel-org/nekernel</a></li>
<li><a href="https://github.com/nekernel-org/draft">https://github.com/nekernel-org/draft</a></li>
</ul>
 ]]></content>
        </entry>
<entry>
          <title type="html">C++ for Kernel Development: Part Three</title>
          <link href='https://amlal.nekernel.org/blog/cpp_kernel_part_3' />
          <published>2025-11-30</published>
	  <id>https://amlal.nekernel.org/blog/cpp_kernel_part_3</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_kernel_part_3"><![CDATA[ <h1>Methodology of Freestanding Development: Part Three: Memory and C++</h1>
<h2>Abstract</h2>
<h3>Part Three: Memory and C++ Classes</h3>
<p>This last part treats about the final and most important part of this paper so
far. Memory. As you may already have known, the C++ language uses a class
lookup system (also called v-table) in order to refer to a base method in case if
the instance has it missing.</p>
<h3>Notice</h3>
<p>This part is fully available as a PDF document <a href="https://doi.org/10.5281/zenodo.18396282">here.</a> it will be updated accordingly.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">C++ for Kernel Development: Part Two</title>
          <link href='https://amlal.nekernel.org/blog/cpp_kernel_part_2' />
          <published>2025-11-27</published>
	  <id>https://amlal.nekernel.org/blog/cpp_kernel_part_2</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_kernel_part_2"><![CDATA[ <h1>Methodology of Freestanding Development: Part Two: Constexpr and Friends</h1>
<h2>Abstract</h2>
<h3>Part Two: Constexpr and Friends</h3>
<p>As you can see these two structures leverages the &quot;constexpr&quot; keyword to make sure that no bugs or panic occurs at runtime because of a misuse of a system resource.<br/>
Which is why the constexpr keyword is very powerful here, we avoid the many pitfalls of writing (and hoping) that the C version will be well-thought enough so that we can catch such bugs later.</p>
<h3>Bonus: Concept and the Device Driver Kit</h3>
<p>The following shows how powerful C++ can be when combining it with Device Driver development as well.</p>
<pre><code>/// Reference implementation: https://github.com/nekernel-org
/// /nekernel/blob/stable/src/libDDK/DriverKit/c%2B%2B/driver_base.h
/// @brief This concept requires the Driver to be IDriverBase compliant.

template &lt;typename T&gt;
concept IsValidDriver = requires(T a) {
  { a.IsActive() &amp;&amp; a.Type() &gt; 0 };
};

/// @brief Consteval helper to detect
/// whether a template is truly based on IDriverBase.
/// @note This helper is consteval only.
template&lt;IsValidDriver T&gt;
inline consteval void ce_ddk_is_valid(T) {}
</code></pre>
<h3>Notice</h3>
<p>This article is only the second part of the series of blog-posts about C++ in a kernel development setting.
Follow me using the RSS feed to stay in touch! <br/></p>
<p>This article is also available as a PDF <a href="https://doi.org/10.5281/zenodo.18396282">here.</a> it will be updated accordingly.</p>
 ]]></content>
        </entry>
<entry>
          <title type="html">C++ for Kernel Development: Part One</title>
          <link href='https://amlal.nekernel.org/blog/cpp_kernel_part_1' />
          <published>2025-11-25</published>
	  <id>https://amlal.nekernel.org/blog/cpp_kernel_part_1</id>
	  <content type="html" xml:base="https://amlal.nekernel.org/blog/cpp_kernel_part_1"><![CDATA[ <h1>Methodology of Freestanding Development: Part One: Introduction</h1>
<h2>Abstract</h2>
<p>Many and most kernels have been shipped using the C programming language.
And some of them like EKA2 uses the C++ programming language. Although
notoriously difficult, one may still adapt to those constraints in order to deliver
one such operating system kernel.
That is the reason that most production-grade kernels (Linux, XNU, and NT)
are mostly written in C. With a higher-level subset in C++.
However, when correctly applying C++ principles to kernel development, one
makes the development much more easier to pull off.</p>
<h3>Notice</h3>
<p>This article is only the first part of the series of blog-posts about C++ in a kernel development setting.
Follow me using the RSS feed to stay in touch! <br/></p>
<p>This article is also available as a PDF <a href="https://doi.org/10.5281/zenodo.18396282">here.</a> it will be updated accordingly.</p>
 ]]></content>
        </entry>
  </feed>