<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mardy</title><link>http://mardy.it/</link><description>My personal space in the internet. Here you'll find links to my projects, as well as my boring blog about programming, languages, politics, photography and a bit of anything that crosses my mind.</description><atom:link href="http://mardy.it/it/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>it</language><copyright>Contents © 2026 &lt;a href="mailto:info@mardy.it"&gt;Alberto Mardegan&lt;/a&gt; </copyright><lastBuildDate>Sat, 11 Apr 2026 13:54:03 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Teaser: connecting Nintendo Switch controllers to the Wii</title><link>http://mardy.it/it/blog/2026/04/teaser-connecting-nintendo-switch-controllers-to-the-wii.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;A few months ago I started playing with the Bluetooth controller embedded in
the Nintendo Wii, to see if it was possible to get it to connect to other
devices than just the Wii remotes. If you ask internet forums, you might fall
into the impression that the Wii is not using a standard Bluetooth controller,
or that it has been somehow "crippled" in order to restrict it to connect to
the Wiimotes only, but that's not the case: it's an ordinary controller from
its era, it's just that the Wii software (both the official SDK and the
homebrew libogc) only uses it for the Wiimotes.&lt;/p&gt;
&lt;p&gt;I first started looking into
&lt;a href="https://github.com/devkitPro/libogc/tree/master/lwbt"&gt;&lt;code&gt;lwBT&lt;/code&gt;&lt;/a&gt;, the bluetooth
stack used in libogc, but I quickly realized that it was impossible to get full
control over the controller via this library: it has been adapted to work with
the subset of the HID protocol used by the Wiimotes, and even if you can issue
bluetooth commands to the controller via the HCI layer, you cannot receive the
replies, since they are already intercepted by lwBT and there's no way to hook
into them.&lt;/p&gt;
&lt;p&gt;So I started writing my own little bluetooth stack,
&lt;a href="https://github.com/embedded-game-controller/bt-embedded"&gt;&lt;code&gt;bt-embedded&lt;/code&gt;&lt;/a&gt; which
from the ground up has been designed to be used by embedded devices and
covering the use case of serving different clients running in a single process,
and I've integrated it into
&lt;a href="https://github.com/embedded-game-controller/embedded-game-controller"&gt;&lt;code&gt;embedded-game-controller&lt;/code&gt;&lt;/a&gt;
(though this is not merged into the &lt;code&gt;master&lt;/code&gt; branch yet) in order to allow
connecting to bluetooth controllers. And in the last couple of days I've
written a little ugly program to visualize the controllers in a 3D scene, in
order to better test them:&lt;/p&gt;
&lt;iframe src="https://vkvideo.ru/video_ext.php?oid=-230221529&amp;amp;id=456239018&amp;amp;hash=7f8047b16af7164f&amp;amp;hd=1" width="640" height="360" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Yes, the 3D model sucks, it was a nice model when I downloaded it from a free
site, but then heavily reduced the number of polygons using Blender and went a
bit too far; I'll do a better model later. The accelerometer information is not
shown yet (I'd like to use it to actually tilt the controller, instead of using
the joystick), but that will not be hard.&lt;/p&gt;
&lt;p&gt;At the moment, the only supported controllers are the Nintendo Switch Pro
controller (I'm using a clone here) and the Joy-cons, so there's still quite
some work to do to add more.&lt;/p&gt;
&lt;p&gt;It's been a journey in which I learned a lot about Bluetooth and USB and, who
knows, maybe this will come handy in the future too.&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2026/04/teaser-connecting-nintendo-switch-controllers-to-the-wii.html</guid><pubDate>Sat, 11 Apr 2026 13:13:06 GMT</pubDate></item><item><title>Choreograph is still alive</title><link>http://mardy.it/it/blog/2025/09/choreograph-is-still-alive.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;Back in 2023 I started writing a game -- which is still under development as
I'm dedicating very little time to it -- and at a certain point I found myself
in need of animating the movement of a few rectangles on the screen. Having
decided to code the game in C++ and to use just libSDL as a base (in order to
keep the game as portable as possible), I started looking around for existing
solutions which would do just what I need: animating points between two values,
while being display and platform agnostic.&lt;/p&gt;
&lt;h3&gt;Choreograph&lt;/h3&gt;
&lt;p&gt;I was happy to find the &lt;a href="https://github.com/sansumbrella/Choreograph"&gt;Choreograph
library&lt;/a&gt;, which promised to do
exactly what I needed, without bringing in any more dependencies. Integrating
it in my project proved to be extremely easy, and it took me a few minutes to
implement the animation.&lt;/p&gt;
&lt;p&gt;All was perfect, except one thing: the last commit to the repository happened
in 2016. I submitted a couple of minor fixes, and there was no reaction. Even
though I was very happy with the library, I decided not to get tied to a
project that was apparently dead, so I dropped this integration and instead
wrote my own implementation -- which was just enough to fill my immediate need,
but was unlikely to be reusable as a generic animation framework.&lt;/p&gt;
&lt;p&gt;Over time, though, several times I happened to bump into a situation where I
would have liked to add some animation, but given that I was not really happy
with my home-brew solution, I always held myself back from this desire and
focused on more substantial issues: so, no animations. In March this year I
decided to write to the author of Choreograph to check whether he was still
interested in maintaining the project, but got no answer.&lt;/p&gt;
&lt;h3&gt;A maintained fork&lt;/h3&gt;
&lt;p&gt;Well, one cannot certainly accuse me of being impatient in this case, since I
waited a few more months before finally deciding that I find Choreograph to be
too convenient to let it just rot. Here is my &lt;a href="https://github.com/mardy/Choreograph"&gt;&lt;em&gt;maintained&lt;/em&gt; (for how long,
we'll see!) fork of the Choreograph
project&lt;/a&gt;; so far I've added:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A few commits to fix compilation warnings&lt;/li&gt;
&lt;li&gt;Recipes for the &lt;a href="https://mesonbuild.com/"&gt;Meson build system&lt;/a&gt;, to make it
  easier to build the project in Linux&lt;/li&gt;
&lt;li&gt;CI via GitHub actions&lt;/li&gt;
&lt;li&gt;Updated the tests and the samples to build without libCinder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm not yet able to announce what I'm going to work on next in Choreograph;
this will become clear as I'll be using it more. For the time being, it's
enough for you to know that such a project exists, and I'll be happy to accept
contributions in the form of code and ideas.&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2025/09/choreograph-is-still-alive.html</guid><pubDate>Fri, 26 Sep 2025 15:42:31 GMT</pubDate></item><item><title>No, libogc did not steal RTEMS code</title><link>http://mardy.it/it/blog/2025/04/no-libogc-did-not-steal-rtems-code.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;&lt;em&gt;Update 09/05/2025:&lt;/em&gt; while the text below addresses a couple of specific blocks of code,
after publishing this article I've been contacted by some people providing more
evidence pointing that the similarity of the code goes beyond what one might
interpret as “inspiration”. There are also a couple of other bits on
information that the reader might want to take into account: first, a
&lt;a href="https://mas.to/@davejmurphy/114414723608693881"&gt;screenshot of an email&lt;/a&gt; in
which Shagkur tells his version of how the code came about (which seems to
point that, if a copyright infringement actually happened, this was done
without the knowledge of devkitPro's maintainers) and a &lt;a href="https://www.rtems.org/news/2025-05-06-rtems-devkit-libogc-response/"&gt;public statement by
RTEMS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All of a sudden the Wii homebrew community is in flames after Hector Martin
(&lt;a href="https://github.com/marcan"&gt;marcan&lt;/a&gt;, also known in the Linux Kernel
 community), co-author of “The Homebrew Channel” application, &lt;a href="https://github.com/fail0verflow/hbc"&gt;decided to close
the project&lt;/a&gt; and denounce libogc for its
“theft” of RTEMS's code:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It has recently been revealed that the threading/OS implementation in libogc is, in fact, stolen from RTEMS. The authors of libogc didn't just steal proprietary Nintendo code, but also saw it fit to steal an open source RTOS and remove all attribution and copyright information. This goes far beyond ignorance about the copyright implications of reverse engineering Nintendo binaries, and goes straight into outright deliberate, malicious code theft and copyright infringement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A little below, Hector Martin provides this “proof”: &lt;em&gt;you can compare
&lt;a href="https://github.com/devkitPro/libogc/blob/52c525a13fd1762c10395c78875e3260f94368b5/libogc/lwp_threads.c#L580"&gt;this&lt;/a&gt;
function in libogc to
&lt;a href="https://github.com/atgreen/RTEMS/blob/2f200c7e642c214accb7cc6bd7f0f1784deec833/c/src/exec/score/src/thread.c#L385"&gt;this&lt;/a&gt;
function in a really old version of RTEMS&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;While I don't know the truth about libogc's history (I've started contributing
to it only in the last couple of years), and I'd welcome a first-hand
explanation from shagkur (Michael Wiedenbauer), I can confidently say that the
accusation is unfounded, by just looking at the code. To be more precise: I
cannot vouch for the whole of libogc, I can only say that this function, that
Hector Martin offers as example, actually hints that the code was not stolen.&lt;/p&gt;
&lt;p&gt;While it's obvious that the developer of libogc's code did have a look at
RTEMS's code, and this can be assumed because the variable names are very
similar (and in some cases they are so badly named, that they cannot be this
similar by accident!), the code only looks vaguely similar. Furthermore, for
some reason Hector Martin decided to pick a rather recent version of libogc's
code, but if we look at the &lt;a href="https://github.com/devkitPro/libogc/blob/e550333e6f2fc413fd42d6af9a9aaf036d9de9f6/libogc/lwp_threads.c#L469"&gt;first version that was
committed&lt;/a&gt;
(well, to git, at least), we see that similarities are much less striking.
Let's look at a small snippet of the function, where the thread object's
members are being initialized:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RTEMS from 1996:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_preemptible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_preemptible&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_timeslice&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_timeslice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;current_state&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATES_DORMANT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;resource_count&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;real_priority&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;the_thread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;initial_priority&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;libogc from 2023:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;budget_algo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prio&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LWP_CPU_BUDGET_ALGO_NONE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LWP_CPU_BUDGET_ALGO_TIMESLICE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;is_preemptible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_preemtible&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;real_prio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prio&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cur_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LWP_STATES_DORMANT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cpu_time_budget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_lwp_ticks_per_timeslice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;suspendcnt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;res_cnt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;libogc from before 2004:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isr_level&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;real_prio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prio&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cur_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LWP_STATES_DORMANT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;suspendcnt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;thethread&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;res_cnt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Let's pay attention to the &lt;code&gt;is_preemtible&lt;/code&gt; variable, which is present in
current's libogc and in RTEMS, but not in the old libogc: it was added later.
Now, RTEMS has it since at least 1996, so, if libogc was actually copied from
it, how come this variable was not copied, too, but added at a later time?
Note, the accusation against libogc has been formulated in clear-cut terms:
&lt;em&gt;...steal an open source RTOS and remove all attribution and copyright
information...&lt;/em&gt;; it's clear that this is not what happened. It's much more
likely that libogc's developers did look at RTEMS code (which at that time
&lt;a href="https://github.com/atgreen/RTEMS/blob/2f200c7e642c214accb7cc6bd7f0f1784deec833/LICENSE"&gt;had another
license&lt;/a&gt;
and was known as the &lt;em&gt;Real Time Executive for Missile Systems&lt;/em&gt; or &lt;em&gt;Real Time
Executive for Military Systems&lt;/em&gt;) as a model and source of information, but
since the code was heavily adapted for libogc, they didn't feel they were
creating a “derivative work”. It's a grey area, but even myself, if I took a
project written in C++ and translated it into Rust or C#, for example, I'm
rather sure I wouldn't consider my work to be a derivative of the original; I'm
not a lawyer, so I might be plain wrong here, but I would be in good faith.&lt;/p&gt;
&lt;p&gt;At most, libogc could be accused of plagiarism, but in my humble opinion even
that would be a stretch: since we are not talking of some artistic work, but of
work of science/ingeneering, it's normal to build upon others' work. Yes,
credit should generally be given, but given that we are talking of a US
military-related project, I can see that there could be ethical reasons for not
wanting to do so.&lt;/p&gt;
&lt;h4&gt;Summing up&lt;/h4&gt;
&lt;p&gt;I'm consciously omitting the other old accusations about “stealing” Nintendo's
code, first because they are not new, and secondly because I don't consider
reverse-engineering as stealing. What I found most disturbing about this story
is that it smells hatred from far away, since I have a hard time to understand
why someone felt the need to look into libogc's origin and publicly smearing
the project and ultimately harming the whole of the Wii homebrew community.&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2025/04/no-libogc-did-not-steal-rtems-code.html</guid><pubDate>Mon, 28 Apr 2025 13:56:49 GMT</pubDate></item><item><title>Porting OpenGL games to the Nintendo Wii: chro.mono</title><link>http://mardy.it/it/blog/2025/04/porting-opengl-games-to-the-nintendo-wii-chomono.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;More than one year has passed since my last blog post, and I'm a bit ashamed to
confess that today's post is again about porting games to the Nintendo Wii — I
always tell to myself that I'm soon going to move to something else, possibly
less geeky than this (by the way, there &lt;em&gt;is&lt;/em&gt; something else I could write
about, but I'll leave it for another post!), but the problems posed by porting
games to an old console are just way too stimulating, and my brain gets
attracted to them in a way that I cannot resist.&lt;/p&gt;
&lt;p&gt;Anyway, have you ever heard of &lt;a href="https://github.com/devkitPro/opengx"&gt;OpenGX&lt;/a&gt;?
It's a project aiming to write an OpenGL driver for the Nintendo GameCube and
Wii's GX API: while these consoles have good (at the time, at least) 3D
capabilities, they were programmed via an API not even remotely close to
OpenGL, so back in 2013 one developer by the name of David Guillen Fandos
started a project to investigate the possibility of wrapping the GX API in
OpenGL. The project was abandoned after reaching a very basic state, but it's
author was diligent enough to write a &lt;a href="https://github.com/davidgfnet/opengx/blob/master/doc/opengx.pdf"&gt;PDF
file&lt;/a&gt;
describing its design and some implementation details. Having bumped into this
document, I was inspired by it and felt it was a pity that such a project had
died -- especially given the fact that this didn't happen because of some
technical infeasibility. So exactly one year ago, in the spring of 2024, I
picked it up and tried porting the game BillardGL to the Wii; I had to add
quite a few things to OpenGX, and adjusting the lighting pipeline, but after
less than one month &lt;a href="https://github.com/mardy/billardgl/tree/wii-port"&gt;the port of BillardGL was
ready&lt;/a&gt;. In the following
months, I ported several other OpenGL 1.x games, gradually enhancing and
expanding OpenGX, until I got most of OpenGL 1.4 supported.&lt;/p&gt;
&lt;center&gt;
&lt;figure&gt;
  &lt;a href="http://mardy.it/archivos/imagines/blog/billardgl.png"&gt;&lt;img src="http://mardy.it/archivos/imagines/blog/billardgl.png" width="80%"&gt;&lt;/a&gt;
  &lt;figcaption&gt;A 23 year old game was just ported to a 19 year old console.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/center&gt;

&lt;p&gt;Should I have stopped there? Probably. Because indeed the Wii's GPU, despite
allowing a good degree of complexity in setting up its shading engine (called
TEV, Texture Environment), does not support the modern GL shading language, and
trying to have the CPU compile the shaders into something that GX could
understand is a task doomed to fail, in part because this would eat up all the
computing power, but especially because there simply isn't an algorithm that
could translate GLSL into GX commands. Is this the end of the journey then?&lt;/p&gt;
&lt;p&gt;Well, the fact that OpenGL 2.0+ shaders can not be machine-translated into GX
commands does not mean that this task is impossible: we've still got the human
brain to use! The idea is the following: let the deveoper who is porting the
game write the GX code corresponding to the GLSL code by hand. Saying it like
this might feel like this is no better than saying “Just port the whole
rendering backend to GX!” but as a matter of facts, there's a big difference:
with this approach all the rest of the OpenGL code stays untouched, and the way
I have design this &lt;em&gt;shader substitution&lt;/em&gt; to work in OpenGX allows one to keep
the GX code isolated in its own source file, without having to change a single
line of the program, save from adding a line near the beginning (in &lt;code&gt;main()&lt;/code&gt;,
typically) to install the GX hooks. This means that your program will still
call &lt;code&gt;glUniform*()&lt;/code&gt;, &lt;code&gt;glVertexAttribPointer()&lt;/code&gt; and so on to setup the rendering
pipeline, but when the program will get to execute &lt;code&gt;glDrawArrays()&lt;/code&gt; OpenGX will
pass control to the hooks previously installed, which will receive the uniforms
and the attributes, and setup the pipeline using GX commands. It might seem
complicated, but &lt;a href="https://github.com/devkitPro/opengx/commit/f837fe9bd6b363bb6a33f298eae99f15e0cd8bfe"&gt;it really
isn't&lt;/a&gt;
(well, if you can deal with the GX API), and it's even more efficient than the
fixed pipeline of OpenGL 1.x, since here the GX commands are reduced to the
bare minimum required by the shader, whereas in the fixed pipeline we have to
follow predefined steps.&lt;/p&gt;
&lt;center&gt;
&lt;figure&gt;
&lt;iframe src="https://vkvideo.ru/video_ext.php?oid=-230221529&amp;amp;id=456239017&amp;amp;hd=1" width="640" height="360" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  &lt;figcaption&gt;chro.mono running on a Nintendo Wii.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/center&gt;

&lt;p&gt;The first (and for the time being, the last) OpenGL 2.0+ game I've ported to
the Wii is &lt;a href="https://thp.io/2013/chromono/"&gt;chro.mono&lt;/a&gt;, a nice puzzle game from
2013 whose source code has been released in 2021. It uses the FBO feature from
OpenGL 3.0, so I had to implement it in OpenGX as well. I'm quite satisfied
with the result, not only because the game runs at 60 FPS, but because it shows
how rather complex shaders (the game has more than a dozen of them) can be
realized in GX; to tell the truth, in couple of cases I had to implement the
fragment shader by converting its code to C and drawing to a temporary texture,
but luckily these shaders are used only during program startup to draw to an
FBO and don't negatively affect the game performance. You can download it &lt;a href="https://github.com/mardy/chromono/releases"&gt;from
here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Summing up, if you get really bored and would like to engage in something
unusual (read: useless), porting games to older consoles would definitely keep
you active for some time. Unfortunately there aren't that many OpenGL games
which are open source, so the candidates for porting are not that many (by the
way, feel free to suggest in the comments — well, not for me, but maybe
&lt;em&gt;someone else&lt;/em&gt; will do it).&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2025/04/porting-opengl-games-to-the-nintendo-wii-chomono.html</guid><pubDate>Tue, 22 Apr 2025 15:35:25 GMT</pubDate></item><item><title>libSDL2 and VVVVVV for the Wii</title><link>http://mardy.it/it/blog/2024/02/libsdl2-and-vvvvvv-for-the-wii.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;Just a quick update on something that I've been working on in my free time.&lt;/p&gt;
&lt;p&gt;I recently refurbished my old Nintendo Wii, and for some reason I cannot yet
explain (not even to myself) I got into homebrew programming and decided to
port libSDL (the 2.x version -- a 1.x port already existed) to it. The result
of this work is already available via the &lt;a href="https://devkitpro.org/"&gt;devkitPro&lt;/a&gt;
distribution, and although I'm sure there are still many bugs, it's overall
quite usable.&lt;/p&gt;
&lt;p&gt;In order to prove it, I ported the game &lt;a href="https://thelettervsixtim.es/"&gt;VVVVVV&lt;/a&gt;
to the Wii:&lt;/p&gt;
&lt;iframe src="https://vk.com/video_ext.php?oid=7200355&amp;amp;id=456239302&amp;amp;hd=1" width="640" height="360" allow="autoplay; encrypted-media; fullscreen;
picture-in-picture;" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;During the process I had to fix quite a few bugs in my libSDL port and in a
couple of other libraries used by VVVVVV, which will hopefully will make it
easier to port more games. There's still an issue that bothers me, where the
screen resolution seems to be not totally supported by my TV (or is it the HDMI
adaptor's fault?), resulting in a few pixels being cut at the top and at the
bottom of the screen. But unless you are a perfectionist, it's a minor issue.&lt;/p&gt;
&lt;p&gt;In case you have a Wii to spare, or wouldn't mind playing on the Dolphin
emulator, &lt;a href="https://github.com/mardy/VVVVVV/releases/tag/v2.4.1_wii1"&gt;here's the link to the VVVVVV
release&lt;/a&gt;. Have fun! :-)&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2024/02/libsdl2-and-vvvvvv-for-the-wii.html</guid><pubDate>Fri, 02 Feb 2024 17:50:44 GMT</pubDate></item><item><title>Una canzone russa, in italiano</title><link>http://mardy.it/it/blog/2023/06/una-canzone-russa-in-italiano.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;Vi propongo la mia traduzione della canzone russa “Fiume portami tu via” (&lt;a href="https://www.youtube.com/watch?v=iNe9BdtlS7M"&gt;Ты
неси меня река&lt;/a&gt; è la versione
originale):&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://vk.com/video_ext.php?oid=7200355&amp;amp;id=456239300&amp;amp;hash=0c629be9cd494d8e&amp;amp;hd=1" width="640" height="360" allow="autoplay; encrypted-media; fullscreen;
picture-in-picture;" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;La mia voce è un po' debolina, quindi se qualcuno volesse ricantarla meglio, ne
sarei felicissimo!&lt;/p&gt;</description><category>cultura</category><category>italiano</category><category>musica</category><category>Russia</category><guid>http://mardy.it/it/blog/2023/06/una-canzone-russa-in-italiano.html</guid><pubDate>Sat, 24 Jun 2023 06:21:09 GMT</pubDate></item><item><title>Will the internet forget russophobia?</title><link>http://mardy.it/it/blog/2023/06/will-the-internet-forget-russophobia.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;I've often wondering what will happen when this horrific war in Europe will
finally be over. I won't be discussing politics here, but what is mostly
interesting to me is how (and if) all the companies who made high proclaims
about not doing business with Russia will justify their getting back into the
Russian market. They will probably count on the fact that the war will be long,
and that people will forget what these companies' stance was. After all, the
world has forget about all the companies who collaborated with the Nazi regime,
so we can expect the same to happen with this war.&lt;/p&gt;
&lt;p&gt;But I don't think that's right: if you made a mistake, you should be held
accountable for it. You might be wondering what is the “mistake” I'm talking
about: that's &lt;strong&gt;russophobia&lt;/strong&gt;, indeed. To put it simply, and make a concrete
example: if The Qt Company stops doing business with Russian companies and
blocks its downloads page to Russian IP addresses because of the war, &lt;em&gt;without
being forced by the government to do so&lt;/em&gt;, but does not take similar measures
against other countries who wage wars which have caused way more deaths and
displacement of individuals, well, that's what I call “russophobia”. Of course,
I'm aware that there's way more than that, and that the hatred for all what is
Russian (including culture and sport competitions) is an even bigger issue, but
in this blog post I'm especially focused on the IT world, so please forgive my
semi-intentional narrow-mindness on this topic.&lt;/p&gt;
&lt;p&gt;Now, I'm fully aware that we live in a mediatic bubble that directs our
decisions in a way that is almost automatic, and I'm sure that most people
working for companies who took russophobic decisions are not themselves
russophobic at all (and I'm not dismissing the possibility that even the very
same people who took these decisions might not be russophobic) and that these
decisions were taken on impulse, because “everyone else is doing the same” and
due to the media pressure that if you don't do that, you might get accused of
supporting the “wrong” side of the war.&lt;/p&gt;
&lt;p&gt;But that's not an excuse, especially for “smart” people like IT engineers (and
I put the adjective between quotes &lt;a href="http://mardy.it/it/blog/2022/11/the-idiotism-of-software-developers.html"&gt;for a
reason&lt;/a&gt;), and especially after
the initial heat has passed and when, after more than one year of war, we
should have been exposed to different point of views and be able to evaluate
the situation more rationally. It has been therefore especially stunning for me
to learn that the Linux Kernel community, and hence The Linux Foundation, has
recently given room to russophobic behaviours, refusing a patch coming from the
Russian company Baikal (a CPU maker). For the record, the incriminated patch
was not related to supporting hardware produced by this company (not that this
would make the deed less serious, but at least one could have argued that there
could be some spot of logic in it):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;From: Jakub Kicinski &amp;lt;kuba@kernel.org&amp;gt;
To: Serge Semin &amp;lt;Sergey.Semin@baikalelectronics.ru&amp;gt;
[...]

On Tue, 14 Mar 2023 01:42:24 +0300 Serge Semin wrote:
&amp;gt; From: Serge Semin &amp;lt;Sergey.Semin@baikalelectronics.ru&amp;gt;

We don't feel comfortable accepting patches from or relating 
to hardware produced by your organization.

Please withhold networking contributions until further notice.
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(&lt;a href="https://lore.kernel.org/all/20230314103316.313e5f61@kernel.org/"&gt;here&lt;/a&gt; the
link to the original discussion). One week later, someone denounced this as a
violation to the Code of Conduct committee (unfortunately the only link I could
find to this is coming from a &lt;a href="https://www.opennet.ru/openforum/vsluhforumID3/129994.html#529"&gt;Russian IT
forum&lt;/a&gt;, and any
other references seem to have been removed from DuckDuckGo and Google), only to
receive a reply that it was all fine.&lt;/p&gt;
&lt;p&gt;To me this is not fine. The war will end, sooner or later, but it bothers me
that we never learn from the past and repeat the same mistakes over and over.
We apparently know a lot about propaganda, yet we fail to recognize it when it
influences our own mind and actions. My humble contribution is the creation of
a page where I list the companies who have taken russophobic actions, and, on
the opposite side, companies (like Flickr and Zorin OS) who have stood out for
positive messages and helpful actions. My hope is that some of the listed
companies will find the courage to review their actions, and either correct
their stance, or at least clarify their reasons. So, I hereby present&lt;/p&gt;
&lt;p style="text-align: center; font-size: 130%"&gt;
  &lt;a href="https://github.com/mardy/russophobia"&gt;Denouncing russophobia&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;where you'll find some of the good and some of the bad companies. I'm sure I'm
missing plenty of them: I just started recollecting my memories and searching
online a couple of days ago. I created this as a GitHub project, because indeed
I'm looking forward for contributions, to help me make the lists more complete.
I need to stress that the fact that a company has announced the suspension of
its business in Russia does not automatically make it russophobic: what we need
to look at is the &lt;em&gt;reason&lt;/em&gt; for that decision: companies like LEGO and Nintendo,
for example, have suspended their operations citing logistic and financial
reasons; no judgement involved.&lt;/p&gt;
&lt;p&gt;Let me repeat it once more, just to make sure there are no misunderstandings:
it's perfectly fine for businesses to take a stance on politics, and sometimes
it might be even praiseworthy; but if a company is international, and does not
apply the same reasoning to other armed conflicts, or seem to care only about
certain human rights violations and not others, then it's a case of double
standards which we need to be aware of, and make the company think twice about
it. And that's also the reason why you won't find any Ukrainian company among
the “bad” ones, because in their case the reaction is perfectly understandable
and they can hardly be accused of adopting double standards (well, technically
speaking, they are adopting double standards, but when you are so directly
impacted I think it does not deserve a blame): if it's your house which burns,
you should definitely scream about it, even if you previously have been silent
about your neighbour house's burning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I'm especially looking forward for more “good” companies&lt;/strong&gt;, who have shown empathy
towards the people affected by the war (and maybe even collected money to help
them) while refraining from taking the judging role and forgetting about all
the injustice and suffering that other wars have caused (including on that very
same piece of land that suddenly appeared on all newspapers' front pages on
February 24th, 2022). I hope that these companies can serve as an example of
positive action, humanity, and love.&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2023/06/will-the-internet-forget-russophobia.html</guid><pubDate>Sun, 04 Jun 2023 07:41:02 GMT</pubDate></item><item><title>Un editoriale di Marco Travaglio</title><link>http://mardy.it/it/blog/2023/03/un-editoriale-di-marco-travaglio.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;Nonostante io non legga più Il Fatto Quotidiano (per i motivi spiegati
&lt;a href="http://mardy.it/it/blog/2016/10/il-fatto-quotidiano-plagio-e-propaganda.html"&gt;qui&lt;/a&gt;, che restano tuttora
validi), continuo a imbattermi negli editoriali di Marco Travaglio, che spesso
apprezzo. Oggi invece mi sono imbattuto nell'introduzione del suo nuovo libro
&lt;a href="https://www.ilfattoquotidiano.it/in-edicola/articoli/2023/02/24/un-anno-di-bugie-per-mettere-agli-italiani-lelmetto-no-pax/7075675/"&gt;“Scemi di
guerra”&lt;/a&gt;,
e ve ne riporto un estratto che ho trovato particolarmente incisivo.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Abbiamo abolito la storia. È vietato raccontare ciò che è accaduto in Ucraina
prima del 24 febbraio 2022: gli otto anni di guerra civile in Donbass dopo il
golpe bianco (anzi, nero) di Euromaidan nel 2014 e le migliaia di morti e feriti
causati dai continui attacchi delle truppe di Kiev e delle milizie filo-naziste
al seguito contro le popolazioni russofone e russofile che, col sostegno di
Mosca, chiedevano l’indipendenza o almeno l’autonomia. Il tutto in barba ai due
accordi di Minsk. La versione ufficiale, l’unica autorizzata, è che prima del
2022 non è successo niente: una mattina Putin s’è svegliato più pazzo del
solito e ha invaso l’Ucraina. Se la gente scoprisse la verità, capirebbe che il
mantra atlantista “Putin aggressore e Zelensky aggredito” vale solo dal 2022:
prima, per otto anni, gli aggressori erano i governi di Kiev (l’ultimo, quello
di Zelensky) e gli aggrediti i popoli del Donbass. Fra le vittime, c’è il
giornalista italiano Andrea Rocchelli, ucciso dall’esercito ucraino… Abbiamo
abolito la geografia. Proibito mostrare la cartina dell’allargamento della Nato
a Est negli ultimi 25 anni (da 16 a 30 membri)… Eppure, che la Nato si sia
allargata a Est, accerchiando e assediando la Russia, minacciandone la
sicurezza con installazioni di missili nucleari sempre più vicine al confine,
in barba alle promesse fatte a Gorbaciov nel 1990, fino all’ultima provocazione
di annunciare l’imminente ingresso nell’Alleanza dei vicini di casa della
Russia – Georgia e Ucraina – è un fatto storico indiscutibile…&lt;/p&gt;
&lt;p&gt;L’altra cartina proibita è quella dei Paesi che non condannano o non sanzionano
la Russia, o se ne restano neutrali: quasi tutta l’Asia, l’Africa e l’America
Latina, cioè l’87% della popolazione mondiale. Ma al nostro piccolo mondo
antico occidentale piace far credere che Putin è isolato e noi lo stiamo
circondando. Sul fatto che Cina, India, Brasile e altri paesucoli stiano con
lui o non stiano con noi, meglio sorvolare: altrimenti lo capiscono tutti che
le sanzioni non funzionano… Solo abolendo la storia si può credere al
presidente Sergio Mattarella quando ripete che “l’Ucraina è la prima guerra nel
cuore dell’Europa nel dopoguerra”. E Belgrado bombardata anche dall’Italia nel
1999 dov’è, in Oceania? E chi era il vicepremier del governo D’Alema che
bombardava Belgrado? Un certo Mattarella… Abbiamo abolito il rispetto per le
altre culture. In una folle ondata di russofobia, abbiamo visto ostracizzare
direttori d’orchestra, cantanti liriche, pianiste di fama mondiale, fotografi,
atleti (anche paraolimpici), persino gatti e querce, soltanto perché russi. E
poi censurare corsi su Dostoevskij, cancellare dai teatri i balletti di
Cajkovskij, addirittura estromettere la delegazione russa dalle celebrazioni
per la liberazione di Auschwitz. Come se il lager l’avessero liberato gli
americani o gli ucraini e non l’Armata Rossa… i trombettieri della Nato
propagandano la bufala dell’“euroatlantismo” e gli scemi di guerra se la
bevono, senz’accorgersi che mai come oggi gli interessi dell’Europa sono
opposti a quelli dell’America. &lt;/p&gt;</description><guid>http://mardy.it/it/blog/2023/03/un-editoriale-di-marco-travaglio.html</guid><pubDate>Wed, 01 Mar 2023 17:37:28 GMT</pubDate></item><item><title>Un piano di pace per l'Ucraina</title><link>http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;Tra i piani di pace proposti da vari politici europei e statunitensi, sarò
sincero, non ne ho letto nemmeno uno che mi paresse anche lontanamente
credibile. La mia impressione è che siano stati stesi più per raggirare i
propri elettori e presentarsi ai loro occhi come operatori di pace (mentre coi
fatti si supportano l'invio di armi e l'inasprimento delle sanzioni) che per un
genuino impegno, giacché ogni politico che abbia speso anche pochi minuti per
informarsi sulla situazione in Ucraina sa benissimo che questi piani di pace
sono non solo inaccettabili per la Russia, ma proprio impresentabili.&lt;/p&gt;
&lt;p&gt;Un piano di pace credibile deve prima di tutto tener conto dei motivi che hanno
spinto la Russia ad invadere l'Ucraina e, soprattutto, che spingono il popolo
russo a supportare la guerra. È certamente legittimo, e forse anche
ragionevole, non credere ai motivi dichiarati ufficialmente: è molto probabile,
anzi, che i motivi che spingono la Russia a continuare questa “operazione
speciale” siano, almeno in parte, altri, di natura economica a vantaggio di
poche persone particolarmente potenti (costruttori di armi in primis). E
possiamo metterci il cuore in pace, e rassegnarci al fatto che questi motivi
non li conosceremo mai; non è nemmeno importante conoscerli, in fondo.&lt;/p&gt;
&lt;p&gt;Quello che dobbiamo conoscere è l'umore del popolo russo, e in particolare i
motivi per cui la popolarità del presidente Putin ha ripreso a risalire dopo
l'invasione dell'Ucraina. L'informazione che si dà in occidente certamente non
aiuta in questo, perché è dal 2014 che omette di riportare fatti importanti
sulla guerra in Donbass. Ebbene, al popolo russo vengono quotidianamente
mostrate in televisione e sui giornali le immagini dei civili che perdono la
vita a Donetsk e nelle altre città del Donbass, proprio nelle zone centrali
delle città dove non sono presenti obiettivi militari. Possiamo considerarla
propaganda, certo, ma i fatti esistono e sono solo un'intensificazione di
quello che è avvenuto negli 8 anni precedenti, ben documentato dai rapporti
della missione dell'OSCE e dall'alto commissariato per i diritti umani delle
Nazioni Unite&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Oltre a questo, l'invio massiccio di armi e gli episodi di discriminazione
contro artisti russi, atleti, personaggi della cultura e dello spettacolo,
talora verso la stessa lingua russa, vengono ampiamente pubblicizzati dai mezzi
locali e convincono i Russi del fatto che il loro paese stia combattendo una
guerra esistenziale contro un'orda di fascisti e, militarmente, contro la NATO
intera.&lt;/p&gt;
&lt;p&gt;Se davvero ci fosse la volontà, da parte dell'Occidente, di raggiungere la
pace, si dovrebbe lavorare per distruggere questa immagine e disarmare la
propaganda russa togliendole i fatti su cui si basa. In particolare, sono
persuaso che molti dei punti seguenti sarebbero ben visti dalla popolazione
occidentale e demotiverebbero la popolazione russa (inclusi molti soldati
richiamati al fronte) a voler combattere questa guerra fratricida:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rimozione di ogni discriminazione nei confronti della cultura russa e dei
   suoi esponenti.&lt;/li&gt;
&lt;li&gt;Promessa che l'Ucraina non entrerà nella NATO o in alleanze militari che
   vadano oltre il reciproco impegno alla difesa (ovvero, no ad esercitazioni
   militari congiunte o basi straniere nel territorio dell'Ucraina, sì ad una
   promessa di intervento militare in caso di attacco).&lt;/li&gt;
&lt;li&gt;Sospensione all'invio di armi finché l'Ucraina non abbia rimosso il titolo
   di eroe nazionale a Stepan Bandera e ad altri membri dell'&lt;a href="https://it.wikipedia.org/wiki/Massacri_di_polacchi_in_Volinia_e_Galizia_orientale"&gt;organizzazione
   nazista UPA&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sospensione all'invio di armi finché l'Ucraina continuerà a bombardare i
   centri abitati privi di installazioni militari.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si noti che nessuno di questi punti richiede la collaborazione o un previo
accordo con altri paesi (anche l'ingresso nella NATO è possibile solo col voto
unanime di tutti i membri esistenti, come ben ci ricorda la Turchia), e tutti
potrebbero essere immediatamente implementati. Quanto più crescerà il numero di
paesi occidentali che porteranno avanti queste politiche, tanto più crescerà
l'incertezza tra la popolazione russa, e col tempo anche l'incomprensione e il
discontento, visto che verrebbero a mancare i motivi ideologici che sostengono
il conflitto da parte russa.&lt;/p&gt;
&lt;p&gt;Se poi vogliamo parlare di un piano di pace, concordato tra NATO, Ucraina e
Russia, questo potrebbe essere svolto lungo queste linee:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L'Ucraina condanna l'ideologia nazista (quindi Bandera e amici), accetta di
   aprire una commissione internazionale (includente anche la Russia) di
   inchiesta sulle stragi del Maidan e di Odessa.&lt;/li&gt;
&lt;li&gt;L'Ucraina assegna al russo lo stato di seconda lingua ufficiale, similmente
   allo stato della lingua svedese in Finlandia&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;L'Ucraina promulga una serie di leggi per garantire una limitata autonomia
   alle 5 regioni attualmente sotto il controllo russo (inclusa la Crimea) e
   l'amnistia per tutti i ribelli che non si siano macchiati di crimini di
   guerra (quindi una sorta di accordi di Minsk estesi a tutte le regioni
   occupate).&lt;/li&gt;
&lt;li&gt;L'Ucraina promette di non ospitare forze e apparecchiature militari di paesi
   terzi nel proprio territorio, né di partecipare ed esercitazioni militari
   congiunte, senza il consenso della Federazione Russa. Può tuttavia entrare
   in alleanze militari a scopo difensivo.&lt;/li&gt;
&lt;li&gt;L'Ucraina promette di non mettere mai in atto sanzioni contro la Russia, né
   di richiedere visti ai cittadini russi per l'attraversamento della
   frontiera.&lt;/li&gt;
&lt;li&gt;L'esercito russo si ritira, e viene temporaneamente sostituito dalle forze
   armate di un paese terzo, non membro NATO, scelto dall'Ucraina.&lt;/li&gt;
&lt;li&gt;Nuovi referendum, sotto il controllo di osservatori internazionali (incluso
   ucraini e russi) nelle 5 regioni contese. I tempi saranno decisi
   dall'Ucraina. Russia e Ucraina si impegnano a riconoscerne e ad
   implementarne gli esiti.&lt;/li&gt;
&lt;li&gt;Le missione di pace introdotta al punto 6 viene dissolta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;È fondamentale comprendere che le questioni territoriali sono di secondaria
importanza, e quello che più preme alla popolazione russa è l'avere buoni
rapporti coi paesi confinanti e non doversi preoccupare di colpi di stato,
rivoluzioni colorate fomentate dall'Occidente o di altri tentativi di mettere
il popolo ucraino contro quello russo. Se, per esempio, vi fosse una regione
russa che desiderasse separarsi dalla Federazione e venire annessa alla
Bielorussia, sono convinto che questo potrebbe avvenire in maniera pacifica
senza serie ripercussioni, in quanto i rapporti tra i due paesi sono buoni e la
Bielorussia non viene percepita come una minaccia. Questa era anche la
situazione con l'Ucraina prima del 2014&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;, ed è la situazione a cui si
dovrebbe cercare di ritornare.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Si veda per esempio il &lt;a href="https://www.ohchr.org/sites/default/files/Documents/Countries/UA/ReportUkraineMay-August2018_EN.pdf"&gt;rapporto del periodo Maggio-Agosto
  2018&lt;/a&gt;,
  a pagina 5, punto 22. Altri rapporti sono visibili &lt;a href="https://www.ohchr.org/en/documents-listing?field_content_category_target_id[180]=180&amp;amp;field_content_category_target_id[182]=182&amp;amp;field_geolocation_target_id[1136]=1136&amp;amp;field_entity_target_id[1349]=1349&amp;amp;field_published_date_value[min]=&amp;amp;field_published_date_value[max]=&amp;amp;sort_bef_combine=field_published_date_value_DESC&amp;amp;page=0"&gt;in questa lista&lt;/a&gt;. &lt;a class="footnote-backref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fnref:1" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Si osservi che in Finlandia lo svedese è la lingua madre del 5% della
  popolazione soltanto, mentre in Ucraina il russo è la lingua madre di circa
  il 30% della popolazione. &lt;a class="footnote-backref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fnref:2" title="Jump back to footnote 2 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Non esattamente, visto che vi erano già stati tentativi di rivoluzioni
  colorate e di instaurazione di governi anti-russi. Spero mi sia concessa
  questa semplificazione. &lt;a class="footnote-backref" href="http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html#fnref:3" title="Jump back to footnote 3 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><category>actualitate</category><category>Italia</category><category>italiano</category><category>politica</category><category>reflexiones</category><category>Russia</category><category>Ucraina</category><category>Union Europee</category><category>USA</category><guid>http://mardy.it/it/blog/2023/01/un-piano-di-pace-per-lucraina.html</guid><pubDate>Sat, 21 Jan 2023 19:33:56 GMT</pubDate></item><item><title>Back to Maemo!</title><link>http://mardy.it/it/blog/2023/01/back-to-maemo.html</link><dc:creator>Alberto Mardegan</dc:creator><description>&lt;p&gt;New year, new job. After &lt;a href="http://mardy.it/it/blog/2022/12/leaving-canonical-again.html"&gt;leaving
Canonical&lt;/a&gt; I'm back to working on the same
software platform on which I started working back in 2006: &lt;a href="http://mardy.it/it/blog/2023/01/maemo.org"&gt;Maemo&lt;/a&gt;.
Well, not exactly the vanilla Maemo, but rather its evolution known as &lt;a href="https://en.wikipedia.org/wiki/Aurora_OS_(Russian_Open_mobile_platform)"&gt;Aurora
OS&lt;/a&gt;,
which is based on &lt;a href="https://sailfishos.org/"&gt;Sailfish OS&lt;/a&gt;. This means I'm
actually back to fixing the very same bugs I introduced back then when I was
working in Nokia, since a lot of the middleware has remained the same.&lt;/p&gt;
&lt;p&gt;At the moment OMP (the company developing Aurora OS) is mostly (or even
&lt;em&gt;exclusively&lt;/em&gt;, AFAIK) targeting business customers, meaning corporations such
as the Russian posts and the railway company, whereas the consumer market is
seen as something in the far away future. Just in case you were curious whether
there were any devices on sale with Aurora OS.&lt;/p&gt;
&lt;p&gt;I should also explain why I've refused several very well paying job
opportunities from Western companies: it's actually for a reason that has been
bothering me since last March, and it's a very simple one. The fact is that
because of the sanctions against Russia I already had to change bank once (as
the one I was using fell under sanctions), and in these months I've always been
working with the fear of not being able to receive my salary, since new
sanctions are introduced every month and more and more banks are being added to
the blacklist. That's why I've restricted my job search to companies having an
official presence in Russia; and to my surprise (and from some point of view, I
could even say &lt;em&gt;disappointment&lt;/em&gt;) the selection and hiring processes were so
quick that I received three concrete offers while I was still working my last
weeks at Canonical, and I joined OMP on that very Monday after my last Friday
at Canonical.&lt;/p&gt;
&lt;p&gt;I mean, I could have rested a bit, at least until the Christmas holidays, but
no. ☺  Anyway, I'm so far very happy with my new job, and speaking Russian at
work is something totally new for me, both challenging and rewarding at the
same time.&lt;/p&gt;</description><guid>http://mardy.it/it/blog/2023/01/back-to-maemo.html</guid><pubDate>Sun, 08 Jan 2023 19:48:52 GMT</pubDate></item></channel></rss>