<?xml version="1.0" encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="https://blog.netbsd.org/roller-ui/styles/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title type="html">NetBSD Blog</title>
    <subtitle type="html"></subtitle>
    <id>https://blog.netbsd.org/tnf/feed/entries/atom</id>
            <link rel="self" type="application/atom+xml" href="https://blog.netbsd.org/tnf/feed/entries/atom?cat=%2FGeneral" />
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/" />
        <updated>2026-04-06T14:13:39+00:00</updated>
    <generator uri="http://roller.apache.org" version="5.0.3 (1388864191739:dave)">Apache Roller (incubating)</generator>
        <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2026_tnf</id>
        <title type="html">The NetBSD Foundation will participate in Google Summer of Code 2026!</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2026_tnf"/>
        <published>2026-02-23T11:32:46+00:00</published>
        <updated>2026-02-23T11:32:46+00:00</updated> 
        <category term="/General" label="General" />
        <category term="pkgsrc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="netbsd" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img alt=&quot;Google Summer of Code logo&quot; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/GSoC-Horizontal.png&quot; /&gt;

&lt;p&gt;
We are happy to announce that &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2026/organizations/the-netbsd-foundation&quot;&gt;The NetBSD Foundation&lt;/a&gt; will participate in &lt;a href=&quot;https://g.co/gsoc&quot;&gt;Google Summer of Code 2026&lt;/a&gt;!
&lt;/p&gt;

&lt;p&gt;
Would you like to learn how to contribute to open source? Google Summer of Code is a great chance to contribute to NetBSD and/or pkgsrc!
&lt;/p&gt;

&lt;p&gt;
You can find a list of possible projects at &lt;a href=&quot;https://wiki.NetBSD.org/projects/gsoc/&quot;&gt;Google Summer of Code project page&lt;/a&gt;. Please do not limit yourself to the project list... If have any cool idea/project about NetBSD and/or pkgsrc please also propose your one!
&lt;/p&gt;

&lt;p&gt;
Please reach us via #netbsd-code IRC channel on &lt;a href=&quot;https://libera.chat/&quot;&gt;Libera.Chat&lt;/a&gt; and/or via &lt;a href=&quot;https://www.NetBSD.org/mailinglists/&quot;&gt;mailing lists&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you are more interested about Google Summer of Code, please also check the homepage at &lt;a href=&quot;https://g.co/gsoc&quot;&gt;g.co/gsoc&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Looking forward to a great Summer!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_bubblewrap_sandboxing</id>
        <title type="html">Google Summer of Code 2025 Reports: Using bubblewrap to add sandboxing to NetBSD</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_bubblewrap_sandboxing"/>
        <published>2025-11-08T15:00:19+00:00</published>
        <updated>2025-11-08T15:00:19+00:00</updated> 
        <category term="/General" label="General" />
        <category term="kernel" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;This report was written by Vasyl Lanko as part of Google Summer of Code 2025.&lt;/p&gt;

&lt;p&gt;As of the time of writing, there is no real sandboxing technique available to NetBSD. There is &lt;a href=&quot;https://man.netbsd.org/chroot.8&quot;&gt;chroot&lt;/a&gt;, which can be considered a weak sandbox because it modifies the root directory of the process, effectively restricting the process&apos; view of the file system, but it doesn&apos;t isolate anything else, so all networking, IPC, and mounts inside this restricted file system are the same as of the system, and are accessible.&lt;/p&gt;
&lt;p&gt;There has already been some research on implementing kernel-level isolation in NetBSD with tools like &lt;a href=&quot;http://2008.asiabsdcon.org/papers/P3A-paper.pdf&quot;&gt;gaols&lt;/a&gt;, &lt;a href=&quot;http://2008.asiabsdcon.org/papers/P5A-paper.pdf&quot;&gt;mult&lt;/a&gt; and &lt;a href=&quot;https://github.com/smherwig/netbsd-sandbox&quot;&gt;netbsd-sandbox&lt;/a&gt;, but they haven&apos;t been merged to NetBSD. Other operating systems have their own ways to isolate programs, &lt;a href=&quot;https://www.freebsd.org/&quot;&gt;FreeBSD&lt;/a&gt; has &lt;a href=&quot;https://docs.freebsd.org/en/books/handbook/jails/&quot;&gt;jails&lt;/a&gt;, and &lt;a href=&quot;https://www.linux.org/&quot;&gt;Linux&lt;/a&gt; has &lt;a href=&quot;https://man7.org/linux/man-pages/man7/namespaces.7.html&quot;&gt;namespaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The goal of this project is to bring a new way of sandboxing to NetBSD. More specifically, we want to implement a mechanism like Linux namespaces. These namespaces allow the isolation of parts of the system from a namespace, or, as the user sees it, from an application.&lt;/p&gt;
&lt;p&gt;NetBSD has &lt;a href=&quot;https://man.netbsd.org/compat_linux.8&quot;&gt;compat_linux&lt;/a&gt; to run Linux binaries on NetBSD systems, and the implementation of namespaces can also be utilized to emulate namespace-related functionality of Linux binaries.&lt;/p&gt;
&lt;p&gt;A simple example to visualize our intended result is to consider an application running under an isolated UTS namespace that modifies the hostname. From the system&apos;s view, the hostname remains the same old hostname, but from the application&apos;s view it sees the modified hostname.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;This report was written by Vasyl Lanko as part of Google Summer of Code 2025.&lt;/p&gt;

&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;As of the time of writing, there is no real sandboxing technique available to NetBSD. There is &lt;a href=&quot;https://man.netbsd.org/chroot.8&quot;&gt;chroot&lt;/a&gt;, which can be considered a weak sandbox because it modifies the root directory of the process, effectively restricting the process&apos; view of the file system, but it doesn&apos;t isolate anything else, so all networking, IPC, and mounts inside this restricted file system are the same as of the system, and are accessible.&lt;/p&gt;
&lt;p&gt;There has already been some research on implementing kernel-level isolation in NetBSD with tools like &lt;a href=&quot;http://2008.asiabsdcon.org/papers/P3A-paper.pdf&quot;&gt;gaols&lt;/a&gt;, &lt;a href=&quot;http://2008.asiabsdcon.org/papers/P5A-paper.pdf&quot;&gt;mult&lt;/a&gt; and &lt;a href=&quot;https://github.com/smherwig/netbsd-sandbox&quot;&gt;netbsd-sandbox&lt;/a&gt;, but they haven&apos;t been merged to NetBSD. Other operating systems have their own ways to isolate programs, &lt;a href=&quot;https://www.freebsd.org/&quot;&gt;FreeBSD&lt;/a&gt; has &lt;a href=&quot;https://docs.freebsd.org/en/books/handbook/jails/&quot;&gt;jails&lt;/a&gt;, and &lt;a href=&quot;https://www.linux.org/&quot;&gt;Linux&lt;/a&gt; has &lt;a href=&quot;https://man7.org/linux/man-pages/man7/namespaces.7.html&quot;&gt;namespaces&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Project Goals&lt;/h1&gt;
&lt;p&gt;The goal of this project is to bring a new way of sandboxing to NetBSD. More specifically, we want to implement a mechanism like Linux namespaces. These namespaces allow the isolation of parts of the system from a namespace, or, as the user sees it, from an application.&lt;/p&gt;
&lt;p&gt;NetBSD has &lt;a href=&quot;https://man.netbsd.org/compat_linux.8&quot;&gt;compat_linux&lt;/a&gt; to run Linux binaries on NetBSD systems, and the implementation of namespaces can also be utilized to emulate namespace-related functionality of Linux binaries.&lt;/p&gt;
&lt;p&gt;A simple example to visualize our intended result is to consider an application running under an isolated UTS namespace that modifies the hostname. From the system&apos;s view, the hostname remains the same old hostname, but from the application&apos;s view it sees the modified hostname.&lt;/p&gt;
&lt;h1&gt;Project Implementation&lt;/h1&gt;
&lt;p&gt;Linux has 8 namespace types, in this project we will focus on only 2 of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UTS namespace, it is the simplest so we can focus on building the general namespace infrastructure with little namespace-specific details&lt;/li&gt;
&lt;li&gt;mount namespace, it is a prerequisite to most other namespace types because UNIX follows the philosophy of &amp;quot;everything is a file&amp;quot;, so we need a separate mount namespace to have different configuration files on the same location as the system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux creates namespaces via the &lt;a href=&quot;https://man7.org/linux/man-pages/man2/unshare.2.html&quot;&gt;unshare&lt;/a&gt; or &lt;a href=&quot;https://man7.org/linux/man-pages/man2/clone.2.html&quot;&gt;clone&lt;/a&gt; system calls, and it will also be our way of calling the namespace creation logic.&lt;/p&gt;
&lt;p&gt;We setup the base for implementing Linux namespaces in the NetBSD kernel using &lt;a href=&quot;https://man.netbsd.org/kauth.9&quot;&gt;kauth&lt;/a&gt;, the subsystem managing all authorization requests inside the kernel. It associates credentials with objects, and because the namespace lifecycle management is related to the credential lifecycle it handles all the credential inheritance and reference counting for us. (Thanks kauth devs!)&lt;/p&gt;
&lt;p&gt;We separate the implementation of each namespace in a different &lt;a href=&quot;https://man.netbsd.org/secmodel.9&quot;&gt;secmodel&lt;/a&gt;, resulting in a similar framework to Linux which allows the isolation of a single namespace type. Our implementation also allows users to pick whether they want to have namespace support, and of what kind, via compilation flags, just like in Linux.&lt;/p&gt;
&lt;h2&gt;UTS namespace&lt;/h2&gt;
&lt;p&gt;UTS stands for UNIX &lt;a href=&quot;https://en.wikipedia.org/wiki/Time-sharing&quot;&gt;Timesharing&lt;/a&gt; System, because it allows multiple users to share a single computer system. Isolating the &lt;code&gt;utsname&lt;/code&gt;  can be useful to give users the illusion that they have control over the system&apos;s hostname, and also, for example, to give &lt;a href=&quot;https://lwn.net/Articles/179345/&quot;&gt;different hostnames to virtual servers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The UTS namespace stores the namespace&apos;s hostname, domain name, and their lengths. To isolate the &lt;code&gt;utsname&lt;/code&gt; we need to first create a copy of the current UTS information, plus we need a variable containing the number of credentials referencing this namespace, or, in simpler terms, the reference count of this namespace.&lt;/p&gt;
&lt;p&gt;This namespace specific information needs to be saved somewhere, and for that we use the credential&apos;s &lt;code&gt;private_data&lt;/code&gt; field, so we can use a &lt;code&gt;UTS_key&lt;/code&gt; to save and retrieve &lt;code&gt;UTS&lt;/code&gt; related information from the secmodel. The key specifies the type of information we want to retrieve from the &lt;code&gt;private_data&lt;/code&gt;, hence using a &lt;code&gt;UTS_key&lt;/code&gt; for the UTS namespace. The key for each namespace is a fixed value (we don&apos;t create a new key for every credential), but the retrieved value for that key from different credentials may be different.&lt;/p&gt;
&lt;p&gt;We had to modify kernel code that was directly accessing  the &lt;code&gt;hostname&lt;/code&gt; and &lt;code&gt;domainname&lt;/code&gt; variables, to instead call &lt;code&gt;get_uts()&lt;/code&gt;, which retrieves the UTS struct for the namespace of the calling process. We didn&apos;t modify occurrences in kernel drivers because drivers are not part of any namespace, so they should still access the system&apos;s resources directly.&lt;/p&gt;
&lt;h2&gt;MNT namespace&lt;/h2&gt;
&lt;p&gt;The MNT namespace isolates mounts across namespaces. It is used to have different versions of mounted filesystems across namespaces, meaning a user inside a mount namespace can mount and unmount whatever they want without affecting or even breaking the system.&lt;/p&gt;
&lt;p&gt;The mount namespace structure in Linux is fairly &lt;a href=&quot;https://elixir.bootlin.com/linux/v6.17.7/source/fs/mount.h#L10&quot;&gt;complicated&lt;/a&gt;. To have something similar in NetBSD we need to be able to control the mounts accessed by each namespace, and for that we need to control what is each namespace&apos;s &lt;a href=&quot;https://nxr.netbsd.org/xref/src/sys/kern/vfs_mount.c#125&quot;&gt;mountlist&lt;/a&gt;, this is also enough for unmounting file systems, because in practice we can just hide them.&lt;/p&gt;
&lt;p&gt;For the mount_namespace, mountlist structure and the number of credentials using the mount namespace are stored in the credential&apos;s private data with the &lt;code&gt;MNT_key&lt;/code&gt;. Similarly to the UTS namespace, we had to modify kernel code to not directly access the &lt;code&gt;mountlist&lt;/code&gt;, but instead go through a wrapper called &lt;code&gt;get_mountlist()&lt;/code&gt; which returns the correct mountlist for the namespace the calling process resides in.&lt;/p&gt;
&lt;p&gt;Implementation for the mount namespace is immensely more complex than for the UTS namespace, it involves having a good understanding of both Linux and NetBSD behaviour, and I would frequently find myself wondering how to implement something after reading the Linux man pages, which would lead to me looking for it in the Linux source code, understanding it, then going back to NetBSD source code, trying to implement it, and seeing it&apos;s too different to implement in the same way.&lt;/p&gt;
&lt;h1&gt;Project Status&lt;/h1&gt;
&lt;p&gt;You can find all code written during this project in GitHub at &lt;a href=&quot;https://github.com/maksymlanko/netbsd-src/tree/gsoc-bubblewrap&quot;&gt;maksymlanko/netbsd-src &lt;code&gt;gsoc-bubblewrap&lt;/code&gt; branch&lt;/a&gt;. Because I intend to continue this work outside of GSoC, I want to reinforce that &lt;a href=&quot;https://github.com/maksymlanko/netbsd-src/commit/d4f5da46735525ed18c9d3e8f053d2875b2bd36c&quot;&gt;this&lt;/a&gt; was the last commit still during GSoC on &lt;code&gt;gsoc-bubblewrap&lt;/code&gt; branch and &lt;a href=&quot;https://github.com/maksymlanko/netbsd-src/commit/81a80d18a8fcce239d6c05fce0d3eb1228941fe9&quot;&gt;this&lt;/a&gt; was the last one for the &lt;code&gt;mnt_ns&lt;/code&gt; still WIP branch.&lt;/p&gt;
&lt;p&gt;The link includes implementation of general namespace code via secmodels, implementation of the UTS namespace and related ATF-tests, and the work-in-progress implementation of mount namespaces.&lt;/p&gt;
&lt;p&gt;The mount namespace functionality is not finished as it would require much more work than the time available for this project. To complete it, it would be required invasive and non-trivial changes to the original source code, and, of course, more time.&lt;/p&gt;
&lt;h1&gt;Future Work&lt;/h1&gt;
&lt;p&gt;As previously mentioned, Linux has 8 namespace types, it is important to see which of the missing namespaces are considered useful and feasible to implement.&lt;/p&gt;
&lt;p&gt;I believe that after mount namespaces it would be interesting to implement PID namespaces as this in combination with mount namespaces would permit process isolation from this sandbox. Afterwards, implementing user namespaces would allow users to get capabilities similar to &lt;code&gt;root&lt;/code&gt; in the namespace, giving them &lt;code&gt;sudo&lt;/code&gt; permissions while still restricting system-wide actions like shutting down the machine.&lt;/p&gt;
&lt;p&gt;A lower hanging fruit is to implement the namespace management functionality, which in Linux is &lt;a href=&quot;https://man7.org/linux/man-pages/man8/lsns.8.html&quot;&gt;lsns&lt;/a&gt; to list existing namespaces, and &lt;a href=&quot;https://man7.org/linux/man-pages/man2/setns.2.html&quot;&gt;setns&lt;/a&gt; to move the current process to an already existing namespace.&lt;/p&gt;
&lt;h1&gt;Challenges&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Semantics. Did you know the unmount system call with MNT_FORCE flag in Linux (usually) returns EBUSY, and in NetBSD it forces the unmounting? One of them makes it easier to implement mount namespaces.&lt;/li&gt;
&lt;li&gt;The behaviour of namespaces is not fully specified in the man pages. If something is not clear from the man pages you need to read the source code.&lt;/li&gt;
&lt;li&gt;Unexpected need to learn a lot of VFS concepts and their differences in NetBSD and Linux.&lt;/li&gt;
&lt;li&gt;There was a much bigger research component than I anticipated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the end, Linux and NetBSD are different operating systems, implemented in different ways. Linux is complex and it is not trivial to port namespaces to NetBSD.&lt;/p&gt;
&lt;h1&gt;Notes&lt;/h1&gt;
&lt;p&gt;The project is called &amp;quot;Using bubblewrap to add sandboxing to NetBSD&amp;quot; and was initially projected to emulate the &lt;code&gt;unshare&lt;/code&gt; system call into &lt;code&gt;compat_linux&lt;/code&gt;, but, seeing that having namespaces could be useful for NetBSD, and that it would be easy to add to &lt;code&gt;compat_linux&lt;/code&gt; afterwards, we decided to instead implement namespaces directly in the NetBSD kernel. Implementing other system calls necessary to make the &lt;code&gt;bwrap&lt;/code&gt; linux binary work correctly also wouldn&apos;t be as satisfying as implementing namespaces directly into NetBSD, so this was why the project was initially called &amp;quot;Using bubblewrap to add sandboxing to NetBSD&amp;quot; but nowadays it would be more accurate to call it &amp;quot;Sandboxing in NetBSD with Linux-like namespaces&amp;quot;.&lt;/p&gt;
&lt;h1&gt;Thanks&lt;/h1&gt;
&lt;p&gt;I am very grateful to Google for Google Summer of Code, because without it I wouldn&apos;t have learned so much this summer, wouldn&apos;t have met with smart and interesting people, and for sure wouldn&apos;t have tried to contribute to a project like NetBSD, even if I always wanted to write operating systems code...
But, the biggest thing I will take with me from this project is the confidence to be able to contribute to NetBSD and other open source projects.&lt;/p&gt;
&lt;p&gt;I would also like to thank the members of the NetBSD organization for helping me throughout this project, and more specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Taylor R. Campbell, Harold Gutch and Nia Alarie from IRC, for helping me fix a nasty &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; bug I had on my system which wouldn&apos;t let me finish compiling NetBSD, and general GSoC recomendations.&lt;/li&gt;
&lt;li&gt;Emmanuel Dreyfus from &lt;code&gt;tech-kern&lt;/code&gt;, with whom I discussed ideas for projects and proposal suggestions, and in the end inspired the namespaces project.&lt;/li&gt;
&lt;li&gt;Christoph Badura and Leonardo Taccari who volunteered to be my mentors. They took time to research and answer my questions, anticipated possible problems in my approaches, and always pointed me in the right direction, daily, during all of GSoC&apos;s period. This project is from the 3 of us.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_mentor_summit</id>
        <title type="html">Google Summer of Code 2025 Mentor Summit in Munich, Germany: travel notes</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_mentor_summit"/>
        <published>2025-10-31T11:41:23+00:00</published>
        <updated>2025-10-31T11:41:23+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;I just came back home from &lt;a href=&quot;https://sites.google.com/view/2025mentorsummit&quot;&gt;Google Summer of Code 2025 Mentor
Summit&lt;/a&gt;.
We were 185 mentors from 133 organizations and it was amazing!&lt;/p&gt;

&lt;p&gt;After nearly a decade being part of GSoC for The NetBSD Foundation,
first as student and then as mentor and org admin, I finally attended
my first GSoC Mentor Summit! That was a fantastic, very intense and fun
experience! I met with a lot of new folks and learned about a lot of
other cool open source projects.&lt;/p&gt;

&lt;p&gt;Let&apos;s share my travel notes!&lt;/p&gt;

</summary>
        <content type="html">&lt;p&gt;I just came back home from &lt;a href=&quot;https://sites.google.com/view/2025mentorsummit&quot;&gt;Google Summer of Code 2025 Mentor
Summit&lt;/a&gt;.
We were 185 mentors from 133 organizations and it was amazing!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code (GSoC)&lt;/a&gt; is
a program organized by &lt;a href=&quot;https://www.google.com/&quot;&gt;Google&lt;/a&gt; with the focus
to bring new developers to open source projects.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.NetBSD.org/foundation/&quot;&gt;The NetBSD Foundation&lt;/a&gt; has been
participating in GSoC since 2005.&lt;/p&gt;
&lt;p&gt;After nearly a decade being part of GSoC for The NetBSD Foundation,
first as student and then as mentor and org admin, I finally attended
my first GSoC Mentor Summit! That was a fantastic, very intense and fun
experience! I met with a lot of new folks and learned about a lot of
other cool open source projects.&lt;/p&gt;
&lt;p&gt;Let&apos;s share my travel notes!&lt;/p&gt;
&lt;h2&gt;Wednesday 22, October 2025: arriving in Munich&lt;/h2&gt;
&lt;p&gt;Going to Munich is relatively doable by train from my hometown. I departed
from &lt;a href=&quot;https://it.wikipedia.org/wiki/Stazione_di_Urbisaglia-Sforzacosta&quot;&gt;Urbisaglia-Sforzacosta&lt;/a&gt;
at 6:59 in the morning. I had around 25 minutes to wait for the change
from &lt;a href=&quot;https://en.wikipedia.org/wiki/Ancona&quot;&gt;Ancona&lt;/a&gt; to
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bologna&quot;&gt;Bologna&lt;/a&gt;. I arrived in
Bologna at around 11:30 where I met Andrea, my friend and
favorite music pusher since childhood. We had lunch together, eating
tasty miso veggie ramen, drank some hot sake and then we had coffee.
He then accompanied me back to the station where I had the train to
&lt;a href=&quot;https://en.wikipedia.org/wiki/M%C3%BCnchen_Hauptbahnhof&quot;&gt;Munich Central
Station&lt;/a&gt; at
13:50.&lt;/p&gt;
&lt;p&gt;The scenery from the train was really nice. Near
&lt;a href=&quot;https://en.wikipedia.org/wiki/Trento&quot;&gt;Trento&lt;/a&gt; and
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bolzano&quot;&gt;Bolzano/Bozen&lt;/a&gt;, full of vineyards and
apple orchards with mountains in the background.
It was cloudy for most of the travel but starting from
&lt;a href=&quot;https://en.wikipedia.org/wiki/Brixen&quot;&gt;Bressanone/Brixen&lt;/a&gt; I
began to see &#171;beautiful blue skies and golden sunshine&#187;.
After Bressanone the scenery was more uncontaminated with light green
grazing lands.
Unfortunately when reaching
&lt;a href=&quot;https://en.wikipedia.org/wiki/Brenner,_South_Tyrol&quot;&gt;Brennero/Brenner&lt;/a&gt;
(last Italian city before
&lt;a href=&quot;https://en.wikipedia.org/wiki/Austria&quot;&gt;Austria&lt;/a&gt;) it started to get
dark and I had not enjoyed the rest of the scenery in Austria
and &lt;a href=&quot;https://en.wikipedia.org/wiki/Germany&quot;&gt;Germany&lt;/a&gt;.
I arrived in Munich at 20:50 and checked in at my hotel which was
around 1km from the station.&lt;/p&gt;
&lt;p&gt;For this journey I was not alone! Also Christoph Badura (&lt;code&gt;&amp;lt;bad@&amp;gt;&lt;/code&gt;) was
a delegate for Google Summer of Code and we had been in touch to get
dinner and beers together. Christoph had some train delays but at 21:40
we were able to meet and went for a walk a bit to the south-east to find
some places to eat and drink.
I had done my homework for the beer places (obviously!) but the place
in my TODO list to visit on Wednesday did not have a lot of food so we
decided to first go to a restaurant and we found &lt;a href=&quot;https://isarvorstadt.haveggie.de/&quot;&gt;Ha Veggie -
Vietnamese Cuisine&lt;/a&gt;. I had some
&lt;a href=&quot;https://en.wikipedia.org/wiki/Edamame&quot;&gt;Edamame&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Vietnamese_cuisine&quot;&gt;B&#242; x&#224;o s&#7843;
&#7899;t&lt;/a&gt;, a delicious dish
with seitan, vegetables, lemongrass and chili pepper.&lt;/p&gt;
&lt;p&gt;We then stopped at &lt;a href=&quot;https://www.frischesbier-muenchen.de/&quot;&gt;Frisches
Bier&lt;/a&gt;, a bit too late, but the
publican was kind enough and she permitted us a last round. I had a
pint of a refreshing Hoppebr&#228;u Wuide Hehna Session IPA.&lt;/p&gt;
&lt;p&gt;We then took a walk back to our hotels, talked a bit and went to sleep.&lt;/p&gt;
&lt;h2&gt;Thursday 23, October 2025: 1st day of Mentor Summit&lt;/h2&gt;
&lt;p&gt;Thursday was the first day of the Mentor Summit. The summit was in
&lt;a href=&quot;https://www.marriott.com/en-us/hotels/mucno-munich-marriott-hotel/&quot;&gt;Munich Marriott
Hotel&lt;/a&gt;,
more in the north of the city, around 5km from the central station.&lt;/p&gt;
&lt;p&gt;I checked out of my hotel and walked to the city center in
&lt;a href=&quot;https://en.wikipedia.org/wiki/Marienplatz&quot;&gt;Marienplatz&lt;/a&gt; and nearby.
I also stopped in a couple of shops to grab some souvenirs for my
family and friends and then took a long walk in the direction of Munich
Marriott Hotel, to hopefully be there at 13:00 sharp for the
start of check-in of GSoC Mentor Summit.&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&apos;Rear of the Siegestor showing its inscription that can be translated to &quot;Dedicated to victory, destroyed by war, urging peace&quot;&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-siegestor.jpg&quot; height=&quot;700&quot; width=&quot;700&quot; /&gt;
&lt;br /&gt;
Rear of the Siegestor showing its inscription that can be translated to &quot;Dedicated to victory, destroyed by war, urging peace&quot;
&lt;/p&gt;

&lt;p&gt;I walked through
&lt;a href=&quot;https://en.wikipedia.org/wiki/Ludwigstra%C3%9Fe&quot;&gt;Ludwigstra&#223;e&lt;/a&gt; and
enjoyed the architecture around me, walking near &lt;a href=&quot;https://en.wikipedia.org/wiki/Ludwig_Maximilian_University_of_Munich&quot;&gt;LMU
University&lt;/a&gt;
and &lt;a href=&quot;https://en.wikipedia.org/wiki/Siegestor&quot;&gt;Siegestor&lt;/a&gt;.
I then proceeded through
&lt;a href=&quot;https://en.wikipedia.org/wiki/Leopoldstra%C3%9Fe&quot;&gt;Leopoldstra&#223;e&lt;/a&gt; and
&lt;a href=&quot;https://en.wikipedia.org/wiki/Ungererstra%C3%9Fe&quot;&gt;Ungererstra&#223;e&lt;/a&gt; and then
arrived to the Munich Marriott Hotel.&lt;/p&gt;

&lt;p&gt;Chris was already in the lobby and he had already checked in. We talked a
bit and then I checked in as well. The room was huge and
comfy! I quickly went back down to the lobby. We then checked in
for Mentor Summit and I finally met Stephanie, Mary and Lucy, the GSoC
Program Admins. I also took with me from home some classical and
specialty Italian chocolate (&lt;a href=&quot;https://en.wikipedia.org/wiki/Cioccolato_di_Modica&quot;&gt;Cioccolato di
Modica&lt;/a&gt;) for the
chocolate room (more about that later!) and left the bars in the
chocolate room.&lt;/p&gt;
&lt;p&gt;The time from 13:00-17:00 was reserved to actually permit mentors to
arrive. At 13:00 there were still not a lot of mentors around so
with Chris we decided to have lunch. We had lunch in a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Trattoria&quot;&gt;trattoria&lt;/a&gt; where we had an
&lt;a href=&quot;https://en.wikipedia.org/wiki/Antipasto&quot;&gt;antipasto&lt;/a&gt; of grilled vegetables,
&lt;a href=&quot;https://en.wikipedia.org/wiki/Arrabbiata_sauce&quot;&gt;penne all&apos;arrabbiata&lt;/a&gt; with
red wine from &lt;a href=&quot;https://en.wikipedia.org/wiki/Montepulciano&quot;&gt;Montepulciano&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While eating Chris talked about the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Tantris&quot;&gt;Tantris&lt;/a&gt; but we were already
full. We had not tasted the haute cuisine but walked there to just
look at the restaurant building. O:)&lt;/p&gt;


&lt;p&gt;
&lt;img alt=&apos;Tables full of chocolate and sweets from the chocolate room&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-chocolate_room.jpg&quot; height=&quot;1000&quot; width=&quot;750&quot; /&gt;
&lt;br /&gt;
Tables full of chocolate and sweets from the chocolate room
&lt;/p&gt;

&lt;p&gt;When we came back to Munich Marriott Hotel, I went to the chocolate
room to taste some chocolate/sweets.
In GSoC Mentor Summit it is a tradition to bring great quality
chocolate - or other sweets for places where chocolate is less usual -
so folks can taste sweets from all over the world. That&apos;s a very nice
initiative! I was curious more about non-chocolate sweets completely
new to me so I had some &lt;a href=&quot;https://en.wikipedia.org/wiki/Laddu&quot;&gt;Laddu&lt;/a&gt;
and &lt;a href=&quot;https://en.wikipedia.org/wiki/Kaju_katli&quot;&gt;Kaju katli&lt;/a&gt;, both
delicious!&lt;/p&gt;
&lt;p&gt;I spent the rest of the afternoon down at the Champions Bar
socializing with other mentors.&lt;/p&gt;
&lt;p&gt;We had dinner at around 19:00 with good food accompanied by a couple
of glasses of &lt;a href=&quot;https://en.wikipedia.org/wiki/Zinfandel&quot;&gt;Primitivo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At 20:15 we had the Opening Session.
Stephanie, Mary and Robert warmly welcomed us.
They shared the schedule and introduced to the
&lt;a href=&quot;https://scottberkun.com/2006/how-to-run-a-great-unconference-session/&quot;&gt;unconference&lt;/a&gt;
format of the sessions.
We then had dessert and played the GSoC 2025 Mentor Summit Scavenger Hunt.
The Scavenger Hunt is a game where you can meet and find 25
different folks with something that could be common (e.g. &#171;prefers
spaces (not tabs)&#187;) to something pretty rare (e.g. &#171;has jumped out of a
helicopter&#187;).
This game was nice because it was also a great conversation starter.
I met a lot of mentors both of open source software that I
regularly use but also learned about new interesting open source software and
organizations while doing that!&lt;/p&gt;
&lt;p&gt;We had time until Friday 12:30 and 10 lucky mentors who completed it
(at the end around 60 of 185 were able to complete) got randomly
selected and they got special prizes.&lt;/p&gt;
&lt;p&gt;I stayed up until probably 1am or so, socializing a bit more in
the lobby and then went back to my room to have some sleep,
knowing that Friday was completely packed with Lightning talks and
sessions!&lt;/p&gt;
&lt;h2&gt;Friday 24, October 2025: 2nd day of Mentor Summit&lt;/h2&gt;
&lt;p&gt;I had breakfast around 8:20 at the Green&apos;s Restaurant. I sat at a
table together with other folks and after a minute I saw a known
name in front of me: Lourival Pereira Vieira Neto &lt;code&gt;&amp;lt;lneto@&amp;gt;&lt;/code&gt;! I was
very happy to meet another NetBSD developer and that was a complete
surprise. He was there as a mentor of the
&lt;a href=&quot;http://www.lua.inf.puc-rio.br/&quot;&gt;LabLua&lt;/a&gt; organization.&lt;/p&gt;
&lt;p&gt;GSoC Program Admins welcomed us for the day and recapped the schedule
for Friday and Saturday.&lt;/p&gt;
&lt;h3&gt;Lightning talks, round 1&lt;/h3&gt;
&lt;p&gt;The lightning talks consisted of mentors presenting their best GSoC 2025
projects. The format was fast and fun: a maximum of 3 minutes for the
talk and a maximum of 4 slides! We had presentations from 18 different
mentors and orgs and all of them were able to stay under 3 minutes!&lt;/p&gt;
&lt;p&gt;That was a great occasion also to learn about open source projects, new
orgs and the experiences shared were interesting too.&lt;/p&gt;
&lt;h3&gt;GSoC Feedback Session&lt;/h3&gt;
&lt;p&gt;After the 1st round of Lightning Talks I attended the GSoC Feedback
Session. That was a Q&amp;amp;A session with program admins and org
admins/mentors.&lt;/p&gt;
&lt;p&gt;Hot topics this year were AI usage and spam applications that were not
discussed as part of this session because there were two other separate
sessions regarding that later.&lt;/p&gt;
&lt;p&gt;If I only have one sentence to summarize this session... I should
quote Robert sharing that Google Summer of Code is about the journey
for the contributors and mentors to get involved in open source.
The coding is only the means to an end.&lt;/p&gt;
&lt;h3&gt;&amp;quot;Hallway track&amp;quot;, lunch and group photo&lt;/h3&gt;
&lt;p&gt;After the first session I decided to take a break and instead stay
in the &amp;quot;hallway track&amp;quot; where I met new folks and socialized a
bit. Another funny and at the same time a bit embarrassing for me thing of GSoC is
that I often met someone and after a couple of minutes of talk I
can associate the face with a name and I figured out that I&apos;m an avid
user / pkgsrc MAINTAINER of the software they contribute to! :)&lt;/p&gt;
&lt;p&gt;At 12:30 we had lunch at Green&apos;s Restaurant and then at 13:40 we had a
group photo and it was pretty tricky to put around 200 folks (program
admins and mentors) on the stage of the Ballroom! :)&lt;/p&gt;
&lt;h3&gt;Let&apos;s talk about improving diversity + inclusion in FOSS!&lt;/h3&gt;
&lt;p&gt;In the afternoon I joined the session about improving diversity.
In open source unfortunately there are a lot of underrepresented
groups and we should fix that.&lt;/p&gt;
&lt;p&gt;There were a lot of experiences shared from several orgs, food for
thought for me! Only to name few topics:
&lt;a href=&quot;https://www.outreachy.org/&quot;&gt;Outreachy&lt;/a&gt;, how to know and create safe
spaces, importance of localization in software and documentation, be
sure to make underrepresented folk as part of key people and also try
to take the burden of other tasks off them.&lt;/p&gt;
&lt;h3&gt;GSoC and AI&lt;/h3&gt;
&lt;p&gt;Artificial Intelligence (AI), in particular &lt;a href=&quot;https://en.wikipedia.org/wiki/Generative_artificial_intelligence&quot;&gt;Generative AI
(GenAI)&lt;/a&gt; has
been a hot topic since project proposals opened this year!&lt;/p&gt;
&lt;p&gt;Some people consider it a speed-up for researching but at the same time it
impedes learning.&lt;/p&gt;
&lt;p&gt;In NetBSD - according to our &lt;a href=&quot;https://www.NetBSD.org/developers/commit-guidelines.html&quot;&gt;Commit
Guidelines&lt;/a&gt; -
code generated by large language model (LLM) or similar technologies is
considered tainted code because such models can be trained on
copyrighted materials and such resulting code can then violate
copyright.&lt;/p&gt;
&lt;p&gt;More than 80% of GSoC contributors who filled an anonymous survey used
AI, mainly for code generation, code completion, text generation,
debugging and error detection.&lt;/p&gt;
&lt;p&gt;Most mentors are usually not happy with the outcomes of AI with code
often resulting in buggy/vulnerable and poor quality, violating
copyright and some mentors also pointed out that as part of mentoring
we should also make contributors aware of environmental/ecological
impact of such use.&lt;/p&gt;
&lt;p&gt;However, both contributors&apos; and mentors&apos; surveys on AI are relatively small
dataset (around 90 mentors and 90 contributors).&lt;/p&gt;
&lt;h3&gt;Lightning talks, round 2&lt;/h3&gt;
&lt;p&gt;At 16:00 we had the 2nd and last round of Lightning talks. That was
another great opportunity to learn more about more projects and
organizations!&lt;/p&gt;
&lt;h4&gt;Asynchronous I/O by Ethan Miller&lt;/h4&gt;

&lt;p&gt;
&lt;img alt=&apos;Christoph presenting his lightning talk&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-bad_lightning_talk.jpg&quot; height=&quot;700&quot; width=&quot;700&quot; /&gt;
&lt;br /&gt;
Christoph Badura (&lt;code&gt;&amp;lt;bad@&amp;gt;&lt;/code&gt;) presenting his lightning talk
&lt;/p&gt;

&lt;p&gt;Christoph Badura (&lt;code&gt;&amp;lt;bad@&amp;gt;&lt;/code&gt;) did a lightning talk too and he presented
work done by Ethan Miller. Ethan also blogged about his work, please
read &lt;a href=&quot;https://blog.netbsd.org/tnf/entry/gsoc2025_asynchronous_i_o_framework&quot;&gt;Google Summer of Code 2025 Reports: Asynchronous I/O
Framework&lt;/a&gt;
if you missed it!&lt;/p&gt;
&lt;p&gt;This code was also imported by Christos Zoulas (&lt;code&gt;&amp;lt;christos@&amp;gt;&lt;/code&gt;), thanks
Christos!, and is now part of &lt;code&gt;-current&lt;/code&gt; and it will be in NetBSD
12.0.&lt;/p&gt;
&lt;h3&gt;GSoC spammy proposals&lt;/h3&gt;
&lt;p&gt;After the Lightning talks there was a break and then at 17:30 I
joined the session about GSoC spammy proposals.&lt;/p&gt;
&lt;p&gt;This year most organizations received many more proposals, mostly due
contributors starting to massively use GenAI.&lt;/p&gt;
&lt;p&gt;A lot of suggestions and tips were shared to make the mentor
review job smooth and easy as possible.&lt;/p&gt;
&lt;p&gt;The most important suggestion is that mentors must do a 1:1
conversation with potential contributors before accepting them.
The weight of the project proposal is like 2/10 and the actual 8/10
weight is on conversations between mentors and contributor.&lt;/p&gt;
&lt;h3&gt;Dinner and social event&lt;/h3&gt;
&lt;p&gt;Around 19:00 we had dinner, desserts and socialized.
Stephanie also did a final talk recapping GSoC 2025 and thanking
all mentors for making that possible.&lt;/p&gt;
&lt;p&gt;We then had drinks and it then started the karaoke session (and there
were a lot of pro folks doing that, very nice!).&lt;/p&gt;
&lt;p&gt;The karaoke session at Ballroom closed with the waiter singing Closing
Time (not the one by Tom Waits that is mostly instrumental, but the one
by Semisonics!, I did not know it but that&apos;s melancholic as well for
me, just smells a little bit less of whisky and cigs compared to the
Tom Waits one ;)).&lt;/p&gt;
&lt;p&gt;We went downstairs to the Champions Bar, had two rounds of some good
Higgins Ale Works IPA and socialized a bit more. Time passed pretty
quickly and also the barman there at Champions Bar started singing
Closing Time!&lt;/p&gt;
&lt;p&gt;We went a bit outside and in the lobby talking with other mentors
and then I went back to my room to get some sleep for the last day of
the summit.&lt;/p&gt;
&lt;h2&gt;Saturday 25, October 2025: 3rd day of Mentor Summit&lt;/h2&gt;
&lt;p&gt;I had breakfast around 8:00, a bit earlier, given that on Saturday the
first session started at 9:00.&lt;/p&gt;
&lt;h3&gt;Porting &amp;amp; Packaging&lt;/h3&gt;
&lt;p&gt;At 9:00 I joined a session about porting and packaging. We had
both FreeBSD porters, pkgsrc maintainers and other package systems
maintainers on one side. On the other side there were also a lot of
upstreams.&lt;/p&gt;
&lt;p&gt;We shared do-s and don&apos;t-s on packaging.&lt;/p&gt;
&lt;h3&gt;How to get students to engage with the community&lt;/h3&gt;
&lt;p&gt;Christoph Badura (&lt;code&gt;&amp;lt;bad@&amp;gt;&lt;/code&gt;) proposed a session to share
experiences on how to get contributors to engage with the community and
a lot of mentors provided a lot of great suggestions.&lt;/p&gt;
&lt;p&gt;One thing that most mentors agreed on and worked well was to invite
contributors regular (or less regular, to avoid putting too much
pressure on contributors) blog posts / status updates.&lt;/p&gt;
&lt;p&gt;Some organizations also did that as part of their weekly / bi-weekly
updates that are often video meetings. In that case they reserved a slot for
the contributor so that they can share their status updates.&lt;/p&gt;
&lt;p&gt;These are great opportunities for the contributor to get in touch with
the community.&lt;/p&gt;
&lt;h3&gt;Open source tools for supply chain security&lt;/h3&gt;
&lt;p&gt;I then joined a session about open source tools for supply chain
security.&lt;/p&gt;
&lt;p&gt;We discussed about &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_supply_chain&quot;&gt;Software Bill of Materials
(SBOM)&lt;/a&gt; and its
importance in the context of regulations like EU Cyber Resilience Act
(CRA).&lt;/p&gt;
&lt;p&gt;We also discussed &lt;a href=&quot;https://en.wikipedia.org/wiki/Common_Platform_Enumeration&quot;&gt;Common Platform Enumeration
(CPE)&lt;/a&gt; and
&lt;a href=&quot;https://github.com/package-url&quot;&gt;Package URL (PURL)&lt;/a&gt; schemas&lt;/p&gt;
&lt;p&gt;We talked about vulnerability management and I
shared a bit my experience in &lt;code&gt;pkgsrc-security@&lt;/code&gt; and how often the
metadata in CVEs (like vendor, product and versions affected) is not
that good. Most package systems have their own workflows and usually
add extra metadata only for their vulnerability DB.&lt;/p&gt;
&lt;p&gt;I also learned about &lt;a href=&quot;https://cyclonedx.org/capabilities/vex/&quot;&gt;Vulnerability Exploitability eXchange
(VEX)&lt;/a&gt; that some package
systems use.&lt;/p&gt;
&lt;p&gt;There were also mentors from &lt;a href=&quot;https://aboutcode.org/&quot;&gt;AboutCode&lt;/a&gt; and
&lt;a href=&quot;https://eclipse.dev/sw360/&quot;&gt;SW360&lt;/a&gt;, projects that looks very
interesting and I should learn more about them!&lt;/p&gt;
&lt;h3&gt;Vintage computing&lt;/h3&gt;
&lt;p&gt;Before lunch I joined the Vintage computing session.&lt;/p&gt;
&lt;p&gt;Everyone presented themselves and talked about the most vintage
computer they had, how running old machines is both fun and productive
and we also talked about old Unix-es and &lt;a href=&quot;https://www.tuhs.org/&quot;&gt;The Unix Heritage
Society&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Lunch&lt;/h3&gt;
&lt;p&gt;I had lunch at Green&apos;s Restaurant with other mentors and then
socialized a bit outside Ballroom.&lt;/p&gt;
&lt;h3&gt;Waitlisted Lightning talk and funny stories&lt;/h3&gt;
&lt;p&gt;At 14:00 we had the last sessions. I went to the waitlisted Lightning
talk, that can be considered the Lightning talk, round 3! :)&lt;/p&gt;
&lt;p&gt;Mentors from different organizations shared interesting projects.&lt;/p&gt;
&lt;p&gt;After the lightning talks several of us shared funny stories/hacks.
Like learning languages in interesting ways, taking photographs of
garbage to train and realize a robot that cleans it, a sort of
Tinder for food... And much more! :)&lt;/p&gt;
&lt;h3&gt;Closing session&lt;/h3&gt;
&lt;p&gt;At 15:30 we had the closing session.&lt;/p&gt;
&lt;p&gt;Some of us stayed for another 1 or 2 hours and talked, socialized a
bit more and said see you soon to each other.&lt;/p&gt;
&lt;h3&gt;Going near Munich East Station and dinner with Chris&lt;/h3&gt;
&lt;p&gt;Around 17:00 I left the Munich Marriott hotel to check in
to my hotel for Saturday night near &lt;a href=&quot;https://en.wikipedia.org/wiki/Munich_East_station&quot;&gt;Munich East
Station&lt;/a&gt;.
It was raining for most of the morning and afternoon but luckily around
17:00 it stopped and the sky seemed fine. I decided to take a walk - a
bit more than 6km - to reach the hotel.
Also that time I&apos;m happy that I took a long walk because I was able to
stay for most of my walk in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Englischer_Garten&quot;&gt;Englischer
Garten&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;
&lt;img alt=&apos;Glass of Camba Island (NEIPA) beer and list of draft beers&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-tap-house.jpg&quot; height=&quot;1000&quot; width=&quot;750&quot; /&gt;
&lt;br /&gt;
Glass of Camba Island (NEIPA) beer and list of draft beers
&lt;/p&gt;

&lt;p&gt;I checked in at my hotel and then went to
&lt;a href=&quot;https://tap-house-munich.de/en/&quot;&gt;Tap-House&lt;/a&gt; where with Christoph we
planned to have dinner and a couple of beers. Tap-House had a really
huge choice of craft beers with 40 drafts! We had a pinsa
&lt;a href=&quot;https://en.wikipedia.org/wiki/Marinara_sauce&quot;&gt;marinara&lt;/a&gt;, a flatbread
similar to pizza and I had a couple of small IPAs from Camba Bavaria
and Yankee &amp;amp; Kraut Pure HBC 630, a DNEIPA.&lt;/p&gt;
&lt;p&gt;We decided to take a walk and went to
&lt;a href=&quot;https://brewsli.de/&quot;&gt;BrewsLi&lt;/a&gt; for some last good night beers. BrewsLi
was a very nice brew pub. We sat at a table and near us there were
several board games. Chris took one of this board game &lt;a href=&quot;https://en.wikipedia.org/wiki/Mensch_%C3%A4rgere_Dich_nicht&quot;&gt;Mensch &#228;rgere Dich
nicht&lt;/a&gt; and
explained to me the rules. A lot of aleatory is involved but there is also some
strategy and it was funny to play and we probably played for 40 minutes or so
because most of our game pieces returned to the &amp;quot;out&amp;quot; section.
I took a walk with Chris back to the nearest metro station and I came
back to my hotel around 2:00.&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&apos;Mensch &#228;rgere Dich nicht board game&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-mensch_argere_dich_nicht.jpg&quot; height=&quot;1000&quot; width=&quot;750&quot; /&gt;
&lt;br /&gt;
Mensch &#228;rgere Dich nicht board game
&lt;/p&gt;

&lt;h2&gt;Sunday 26, October 2025: stop in Bolzano/Bozen&lt;/h2&gt;
&lt;p&gt;On Sunday I took a train from Munich East Station to
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bolzano&quot;&gt;Bolzano/Bozen&lt;/a&gt; because it was
unfeasible to go back home by train to
&lt;a href=&quot;https://en.wikipedia.org/wiki/Marche&quot;&gt;Marche region&lt;/a&gt; without a stop
somewhere in Italy.&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&apos;View of Bolzano from St. Oswald Promenade&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-bolzano.jpg&quot; height=&quot;700&quot; width=&quot;700&quot; /&gt;
&lt;br /&gt;
View of Bolzano from St. Oswald Promenade
&lt;/p&gt;

&lt;p&gt;I went for a walk Passeggiata di Sant&apos;Osvaldo (St. Oswald Promenade)
uphill to be able to enjoy a view of the city from the top until
sunset.&lt;/p&gt;
&lt;p&gt;I had a simple but very tasty onion soup and a Gose (really good, one
of the best Gose I&apos;ve drunk!) and Session IPA at &lt;a href=&quot;https://www.batzen.it/&quot;&gt;Batzen
H&#228;usl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was not able to visit anything else in the night because I was pretty
tired so I went to sleep earlier.&lt;/p&gt;
&lt;h2&gt;Monday 27, October 2025: back home&lt;/h2&gt;
&lt;p&gt;In the morning I took a walk to Walther Square and nearby. I got some
souvenirs for the family and then I took the trains back home and spent
most of my day on the trains.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://sites.google.com/view/2025mentorsummit&quot;&gt;Google Summer of Code 2025 Mentor
Summit&lt;/a&gt; was an amazing
experience!&lt;/p&gt;
&lt;p&gt;I had the chance to participate in very interesting talks, sessions and
discussions. I met a lot of mentors from all over the world and
learned about new open source projects and organizations. All the folks
were also extremely positive, easy to talk to and I had a lot of fun.&lt;/p&gt;
&lt;p&gt;Thanks to program admins and all the mentors who made this possible!
Thanks a lot also to &lt;a href=&quot;https://www.google.com&quot;&gt;Google&lt;/a&gt; for organizing it
and thanks to &lt;a href=&quot;https://www.NetBSD.org/foundation/&quot;&gt;The NetBSD
Foundation&lt;/a&gt; that permitted me to
go!&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&apos;NetBSD hand-written logo on the GSoC guest book&apos; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/gsoc2025-netbsd_guestbook.jpg&quot; height=&quot;700&quot; width=&quot;700&quot; /&gt;
&lt;br /&gt;
NetBSD hand-written logo on the GSoC guest book
&lt;/p&gt;

&lt;p&gt;If you are new to open source, consider applying for it! If you are a
seasoned open source contributor, consider participating as a mentor!
You can learn more about GSoC at &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code
(GSoC) website&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_nat64_protocol_translation_part2</id>
        <title type="html">Google Summer of Code 2025 Reports: Enhancing Support for NAT64 Protocol Translation in NetBSD, part 2</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_nat64_protocol_translation_part2"/>
        <published>2025-10-20T14:19:28+00:00</published>
        <updated>2025-10-20T14:19:28+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="netbsd" scheme="http://roller.apache.org/ns/tags/" />
        <category term="npf" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
This report was written by Dennis Onyeka as part of Google Summer of Code 2025.
&lt;/p&gt;

&lt;p&gt;
This is the 2nd blog post about his work. If you have missed the first blog post please read &lt;a href=&quot;https://blog.netbsd.org/tnf/entry/gsoc2025_nat64_protocol_translation&quot;&gt;Google Summer of Code 2025 Reports: Enhancing Support for NAT64 Protocol Translation in NetBSD&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
This report will dig on how the &lt;code&gt;npf.conf(5)&lt;/code&gt; syntax will looks like and details of its implementation.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
This report was written by Dennis Onyeka as part of Google Summer of Code 2025.
&lt;/p&gt;

&lt;p&gt;
This is the 2nd blog post about his work. If you have missed the first blog post please read &lt;a href=&quot;https://blog.netbsd.org/tnf/entry/gsoc2025_nat64_protocol_translation&quot;&gt;Google Summer of Code 2025 Reports: Enhancing Support for NAT64 Protocol Translation in NetBSD&lt;/a&gt;.
&lt;/p&gt;

&lt;h2&gt;Overview&lt;/h2&gt;

&lt;p&gt;
Typical rules looks like:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;map wm0 algo &amp;quot;nat64&amp;quot; 64:ff9b:2a4:: -&amp;gt; 192.0.2.33
map wm0 algo nat64 plen 96 64:ff9b::8c52:7903 &amp;lt;- 140.82.121.3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt; This tells NPF to translate outgoing IPv6 packets using the prefix
&lt;code&gt;64:ff9b:2a4::/96&lt;/code&gt;, rewriting them to use the IPv4 address
&lt;code&gt;192.0.2.33&lt;/code&gt;. When the packet returns and hits NPF, it
changes source from GitHub&apos;s IPv4 to GitHub&apos;s IPv6 address and then it
rewrites the header.&lt;/p&gt;

&lt;h3&gt;When an IPv6 packet from a client hits the NPF machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The NAT64 translation routine (&lt;code&gt;npf_nat64_rwrheader()&lt;/code&gt;) rewrites the IPv6 header to an IPv4 header.
&lt;ul&gt;
&lt;li&gt;The source becomes the host&apos;s IPv4 address or any pool of IPv4 addresses.&lt;/li&gt;
&lt;li&gt;The destination becomes the IPv4 address of &lt;code&gt;github.com&lt;/code&gt; extracted from IPv4 embedded IPv6 address defined in the rule configuration. (e.g. &lt;code&gt;140.82.121.3&lt;/code&gt; from &lt;code&gt;64:ff9b::8c52:7903&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;TCP/UDP/ICMP checksums are recalculated using &lt;code&gt;in4_cksum()&lt;/code&gt; or &lt;code&gt;in6_cksum()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The packet is then routed out to the IPv4 network.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;When a reply packet comes back from the IPv4 server&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NPF performs the reverse translation, embedding the IPv4 address inside the NAT64 prefix to form a valid IPv6 address using &lt;code&gt;npf_embed_ipv4()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The IPv6 packet is then delivered back to the IPv6 client.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Project Accomplishments&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Core Translation Path: Implemented IPv6 -&amp;gt; IPv4 header and reverse rewriting (&lt;code&gt;npf_nat64_rwrheader()&lt;/code&gt; routines).&lt;/li&gt;
&lt;li&gt;Address Mapping: Added functions for embedding and extracting IPv4 addresses within IPv6 prefixes.&lt;/li&gt;
&lt;li&gt;Checksum Recalculation: Integrated checksum updates for IPv4/IPv6 and transport layers.&lt;/li&gt;
&lt;li&gt;Rule Parsing: Extended &lt;code&gt;npf.conf(5)&lt;/code&gt; syntax and parser to accept NAT64 configuration parameters.&lt;/li&gt;
&lt;li&gt;Userland and Kernel Integration: Updated kernel headers, userland utilities, and rule constructors.&lt;/li&gt;
&lt;li&gt;Testing: Verified translation with &lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;dig&lt;/code&gt;, observing packets using &lt;code&gt;tcpdump&lt;/code&gt; and Wireshark.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This project successfully integrates NAT64 along with a separate
DNS64 configuration into NPF, enabling IPv6-only clients to reach
IPv4-only servers through seamless translation.  Although there&apos;s a
need for additional changes and implementation.&lt;/p&gt;

&lt;p&gt;This is indeed the end of my GSoC Program, it was indeed an exciting
moment working with system developers and certainly I&apos;d be an active
contributor to the NetBSD codebase.&lt;/p&gt;

&lt;p&gt;
Source code of the Google Summer of Code project can be found at the following
&lt;a href=&quot;https://github.com/dchidindu5/src/tree/gsoctest&quot;&gt;branch&lt;/a&gt;.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_asynchronous_i_o_framework</id>
        <title type="html">Google Summer of Code 2025 Reports: Asynchronous I/O Framework</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_asynchronous_i_o_framework"/>
        <published>2025-08-30T17:56:23+00:00</published>
        <updated>2025-09-03T07:06:49+00:00</updated> 
        <category term="/General" label="General" />
        <category term="kern" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;This report was written by Ethan Miller as part of Google Summer of Code 2025.&lt;/p&gt;

&lt;p&gt;The goal is to improve the capabilities of asynchronous IO within NetBSD.
Originally the project espoused a model that pinned a single worker thread
to each process. That thread would iterate over pending jobs and complete
blocking IO. From this, the logical next step was to support an arbitrary
number of worker threads. Each process now has a pool of workers recycled
from a freelist, and jobs are grouped per-file so that we do not thrash
multiple threads on the same vnode which would inevitably lock. This
grouping also opens the door for future optimisations in concurrency. The
guiding principle is to keep submission cheap, coalesce work sensibly, and
only spawn threads when the kernel would otherwise block.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;This report was written by Ethan Miller as part of Google Summer of Code 2025.&lt;/p&gt;

&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;The goal is to improve the capabilities of asynchronous IO within NetBSD.
Originally the project espoused a model that pinned a single worker thread
to each process. That thread would iterate over pending jobs and complete
blocking IO. From this, the logical next step was to support an arbitrary
number of worker threads. Each process now has a pool of workers recycled
from a freelist, and jobs are grouped per-file so that we do not thrash
multiple threads on the same vnode which would inevitably lock. This
grouping also opens the door for future optimisations in concurrency. The
guiding principle is to keep submission cheap, coalesce work sensibly, and
only spawn threads when the kernel would otherwise block.&lt;/p&gt;

&lt;h2&gt;Project Details and Status&lt;/h2&gt;
&lt;p&gt;We pin what is referred to as a service pool to each process, with each
service pool capable of spawning and managing service threads. When a job
is enqueued it is distributed to its respective service thread. For regular
files we coalesce jobs that act on the same vnode into one thread. If we
fall back to the synchronous IO path within the kernel it would lock
anyway, but this approach is prudent because if more advanced concurrency
optimisations such as VFS bypass are implemented later this is precisely
the model that would be required. At present, since that solution is not
yet in place, all IO falls back to the synchronous pipeline. Even so there
are performance gains when working with different files, since synchronous
IO can still run on separate vnodes at the same time.&lt;/p&gt;
&lt;p&gt;Through the traditional VFS read/write path, requests eventually reach
bread/bwrite and block upon a cache miss until completion. This kills
concurrency. I considered a solution that bypassed the normal vnode
read/write path by translating file offsets to device LBAs with &lt;code&gt;VOP_BMAP&lt;/code&gt;,
constructing block IO at the buffer and device layer, submitting with
&lt;code&gt;B_ASYNC&lt;/code&gt;, and deferring the wait to the AIO layer with biodone bookkeeping
instead of calling biowait at submission. This keeps submission short and
releases higher level locks before any device wait. The assumptions are
that filesystem metadata is frequently accessed therefore cached so
&lt;code&gt;VOP_BMAP&lt;/code&gt; usually does not block, that block pointers for an inode mostly
remain stable for existing data, and that truncation does not rewrite past
data. For the average case this would provide concurrency on the same file.
In practice, however, it was exceptionally difficult to implement because
the block layer lacks the necessary abstractions.&lt;/p&gt;
&lt;p&gt;This is, however, exactly the solution espoused by FreeBSD, and they
make it work well because struct bio is an IO token independent of the page
and buffer cache. GEOM can split or clone a bio, queue them to devices,
collect child completions, and run the parent callback. Record locks are
treated as advisory so once a bio is in flight the block layer completes it
even if the advisory state changes. NetBSD has no equivalent token. Struct
buf is both a cache object and an IO token tied to UBC and drivers through
biodone and biowait. For now the implementation of service pools and
service threads lays the groundwork for asynchronous IO. Once the BIO layer
reaches adequate maturity, integrating a bio-like abstraction will be
straightforward and yield immediate improvements for concurrency on the
same vnode. The logical next step is to design and port something
comparable to FreeBSDs struct bio which would map very cleanly onto the
current POSIX AIO framework.&lt;/p&gt;

&lt;h2&gt;My Development Environment&lt;/h2&gt;
&lt;p&gt;My development setup is optimised for building and testing quickly. I use
scripts to cross-build the kernel and boot it under QEMU with a small FFS
root. The kernel boots directly with the QEMU option &lt;code&gt;-kernel&lt;/code&gt; without any
supporting bootloader. Early on I tested against a custom init dropped onto
an FFS image. Now I do the same except init simply launches a shell which
allows me to run ATF tests without a full distribution. This makes it
possible to compile a new kernel and run tests within seconds.&lt;/p&gt;

&lt;h2&gt;Lessons&lt;/h2&gt;
&lt;p&gt;One lesson I have taken away is that progress never happens overnight. It
takes enormous effort to get even a few thousand lines of highly
multi-threaded race-prone code to behave consistently under all conditions.
Precision in implementation is absolutely required. My impression of NetBSD
is that it is a fascinating project with an abundance of seemingly
low-hanging fruit. In reality none of it is truly low-hanging or simple,
but compared to Linux there remains a great deal of work to be done. It is
not easy work but the problems are visible and the path forward is clearer.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I also want to note that I intend on providing long term support for this
code in the case that any issues may arise.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The code written as part of this project can be found &lt;a href=&apos;https://github.com/NetBSD/src/pull/58&apos;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/agm2025</id>
        <title type="html">The NetBSD Foundation 2025 Annual General Meeting summary and logs</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/agm2025"/>
        <published>2025-05-28T17:46:58+00:00</published>
        <updated>2025-05-28T17:46:58+00:00</updated> 
        <category term="/General" label="General" />
        <category term="agm" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
On May 17, 21:00 UTC we had The NetBSD Foundation Annual General Meeting on &lt;code&gt;#netbsd-agm&lt;/code&gt; IRC channel on &lt;a href=&quot;https://libera.chat&quot;&gt;Libera.Chat&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
We had presentations from:
&lt;ul&gt;
&lt;li&gt;board (billc)&lt;/li&gt;
&lt;li&gt;secteam (billc)&lt;/li&gt;
&lt;li&gt;releng (martin)&lt;/li&gt;
&lt;li&gt;core (riastradh)&lt;/li&gt;
&lt;li&gt;finance-exec (riastradh)&lt;/li&gt;
&lt;li&gt;membership-exec (martin, christos)&lt;/li&gt;
&lt;li&gt;pkgsrc-pmc (wiz)&lt;/li&gt;
&lt;li&gt;pkgsrc-security (tm, leot)&lt;/li&gt;
&lt;li&gt;gnats (dh)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
At the end we also had a Q&amp;A session open to anyone.
&lt;/p&gt;

&lt;p&gt;
If you have missed it you can find the IRC logs &lt;a href=&quot;https://www.NetBSD.org/foundation/reports/2025.txt&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_welcome_contributors</id>
        <title type="html">Welcome to Google Summer of Code 2025 contributors!</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_welcome_contributors"/>
        <published>2025-05-08T19:09:56+00:00</published>
        <updated>2025-05-08T19:09:57+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img alt=&quot;Google Summer of Code logo&quot; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&quot; /&gt;

&lt;p&gt;
We are happy to announce that &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/organizations/the-netbsd-foundation&quot;&gt;The NetBSD Foundation&lt;/a&gt; will participate in &lt;a href=&quot;https://g.co/gsoc&quot;&gt;Google Summer of Code 2025&lt;/a&gt; with 3 projects!
&lt;/p&gt;

&lt;p&gt;
Here the list of the projects and contributors:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/p2rxlbUv&quot;&gt;Enhancing Support for NAT64 Protocol Translation in NetBSD - Dennis O.I&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/DyO9DOU3&quot;&gt;Asynchronous I/O Framework - Ethan Miller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/projects/KvbHxbzO&quot;&gt;Using bubblewrap to add sandboxing to NetBSD - Vasyl Lanko&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
For the next 3 weeks mentors and contributors will get in touch for the community bonding period. Mentors will help contributors to get started with the project, introduce them to the community and get more familiar with the codebase and adjusting deliverables for the the project.
&lt;/p&gt;

&lt;p&gt;
Welcome Dennis, Ethan and Vasyl!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc2025_tnf</id>
        <title type="html">The NetBSD Foundation will participate in Google Summer of Code 2025!</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc2025_tnf"/>
        <published>2025-02-27T19:10:49+00:00</published>
        <updated>2025-05-08T18:56:21+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;img alt=&quot;Google Summer of Code logo&quot; src=&quot;https://www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&quot; /&gt;

&lt;p&gt;
We are happy to announce that &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2025/organizations/the-netbsd-foundation&quot;&gt;The NetBSD Foundation&lt;/a&gt; will participate in &lt;a href=&quot;https://g.co/gsoc&quot;&gt;Google Summer of Code 2025&lt;/a&gt;!
&lt;/p&gt;

&lt;p&gt;
Would you like to contribute to NetBSD and/or pkgsrc in the next months? Google Summer of Code is a great chance for that!
&lt;/p&gt;

&lt;p&gt;
You can find a list of possible projects at &lt;a href=&quot;https://wiki.NetBSD.org/projects/gsoc/&quot;&gt;Google Summer of Code project page&lt;/a&gt;. Of course, you can also propose your own!
&lt;/p&gt;

&lt;p&gt;
Please reach us via #netbsd-code IRC channel on &lt;a href=&quot;https://libera.chat/&quot;&gt;Libera.Chat&lt;/a&gt; and/or via &lt;a href=&quot;https://www.NetBSD.org/mailinglists/&quot;&gt;mailing lists&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you are more interested about Google Summer of Code please also check official homepage at &lt;a href=&quot;https://g.co/gsoc&quot;&gt;g.co/gsoc&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Looking forward to a great Summer!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/x_org_on_netbsd_the</id>
        <title type="html">X.Org on NetBSD - the state of things</title>
        <author><name>Nia Alarie</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/x_org_on_netbsd_the"/>
        <published>2024-05-04T12:05:20+00:00</published>
        <updated>2024-05-05T21:13:53+00:00</updated> 
        <category term="/General" label="General" />
        <summary type="html">&lt;p&gt;
A few years ago, I wrote a &quot;state of things&quot; blog post about
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/wayland_on_netbsd_trials_and&quot;&gt;Wayland on NetBSD&lt;/a&gt;.
It&apos;s only natural that I should do one about X11, which
is used by far more people to get a graphical environment on NetBSD.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
A few years ago, I wrote a &quot;state of things&quot; blog post about
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/wayland_on_netbsd_trials_and&quot;&gt;Wayland on NetBSD&lt;/a&gt;.
It&apos;s only natural that I should do one about X11, which
is used by far more people to get a graphical environment on NetBSD.
&lt;/p&gt;

&lt;img src=&quot;//ftp.NetBSD.org/pub/NetBSD/misc/nia/glxgears.png&quot; alt=&quot;Spinning glxgears, a classic X.Org program.&quot;&gt;

&lt;p&gt;
There are a lot of differences from how NetBSD and the typical distributor
ship X.Org. For one, we ship it as an optional monolithic package rather than
separate individual packages. This means every driver is included on every system,
rather than as an optional module. Sometimes, this means we need
to fine-tune driver selection to ensure the correct drivers are loaded
on the correct hardware, since multiple conflicting drivers can
claim a video output. We also want sensible fallbacks, since if you&apos;re
using a GPU from the future with an old OS version, you probably
want X to seamlessly fall back to a regular framebuffer.
&lt;/p&gt;

&lt;p&gt;
Secondly, the way our &quot;xsrc&quot; repository is set up, it&apos;s effectively
functioning as a fork of X.Org that regularly pulls from upstream
freedesktop.org (but does not push back). This allows X development
to happen as part of NetBSD.
&lt;/p&gt;

&lt;p&gt;
Thirdly, we use our own build system based purely on BSD makefiles,
not X.Org&apos;s based on GNU autotools. This fits well with our build.sh
cross-compilation system.
&lt;/p&gt;

&lt;p&gt;
We have a number of drivers which have not made their way upstream.
Perhaps the most ubiquitous of these is xf86-input-ws, a driver which
came from OpenBSD, targets an API from NetBSD, and continues to be
developed in both. This is a generic input driver that can
support any pointing device that the kernel supports.  Unlike
xf86-input-mouse, it doesn&apos;t assume the device is a mouse, and
can support advanced touchpad and touchscreen features.
Other NetBSD exclusives include xf86-video-pnozz,
xf86-video-mgx, and xf86-video-crime.
While these all share the &quot;xf86&quot; name inherited from the historical
XFree86 distribution, none of them are exclusively for x86.
&lt;/p&gt;

&lt;p&gt;
There are a number of drivers that are accelerated when used
in NetBSD, but the acceleration support is missing upstream.
This is mostly due to the work of macallan@, who has diligently
worked on drivers for accelerators found on SPARC and PowerPC hardware.
&lt;/p&gt;

&lt;p&gt;
X.Org has historically supported two 2D acceleration modes,
&lt;a href=&quot;https://www.x.org/wiki/Development/Documentation/Performance/&quot;&gt;XAA and EXA&lt;/a&gt;.
XAA seems complicated - according to the X.Org Foundation it
supports accelerating &quot;patterned fills and Bresenham lines&quot; (eh?).
XAA was removed from the X.Org server in 2012, and many old drivers
were not updated to support the newer and simpler EXA model,
except in NetBSD, over a time period of several years.
&lt;/p&gt;

&lt;p&gt;
Did you know that Nvidia
&lt;a href=&quot;https://lwn.net/Articles/380704/&quot;&gt;used to have&lt;/a&gt; an open source graphics
driver? It supported 2D acceleration for a range of cards.
In NetBSD, it&apos;s retained for platforms that included embedded
Nvidia chips and aren&apos;t capable of (or predate, or don&apos;t want)
the modern novueau driver. Six years ago, it was updated in NetBSD
to support EXA acceleration.
&lt;/p&gt;

&lt;p&gt;
There are a few ways our X integration could be improved.
While lots of attention has been paid to the server, less
has been paid to clients (programs).  Did you know that X
includes a
&lt;a href=&quot;//man.NetBSD.org/NetBSD-10.0/xedit.1&quot;&gt;text editor,&lt;/a&gt;
and that text editor supports syntax
highlighting and spell checking?
&lt;/p&gt;

&lt;img src=&quot;//ftp.NetBSD.org/pub/NetBSD/misc/nia/xedit.png&quot; alt=&quot;xedit, the standard editor&quot;&gt;

&lt;p&gt;
NetBSD includes its own command-line spell checker and associated
dictionaries, &lt;a href=&quot;https://man.netbsd.org/NetBSD-10.0/spell.1&quot;&gt;spell(1)&lt;/a&gt;,
inherited from the BSD UNIX of yore.
It&apos;s pretty basic, and only supports
variations of English. To get spell checking to work in xedit, you need
to install ispell (another command-line spell checker) from pkgsrc, install
a dictionary, then set some Xresources (or create symlinks) to make
sure xedit finds ispell. This could surely be streamlined
by teaching xedit about spell.
&lt;/p&gt;

&lt;p&gt;
We also ship every program that has been included with
historical X.Org distributions. This includes well-known
things like
&lt;a href=&quot;https://invisible-island.net/xterm/&quot;&gt;xterm&lt;/a&gt;, slightly less well-known things like 
&lt;a href=&quot;//man.NetBSD.org/xbiff.1&quot;&gt;xbiff(1)&lt;/a&gt;, and obscurities like
&lt;a href=&quot;//man.NetBSD.org/NetBSD-10.0/bitmap.1&quot;&gt;bitmap(1)&lt;/a&gt;
(apparently a 1-bit-per-pixel alternative to MS Paint).
A while ago, we removed some libraries which are no longer used by the modern
X server, and maybe we should evaluate whether we need
all of these programs too.
&lt;a href=&quot;//man.netbsd.org/NetBSD-10.0/xmh.1&quot;&gt;xmh(1)&lt;/a&gt;
is a frontend for a mail system that isn&apos;t included in base.
Together, bitmap and xmh are around 300 kilobytes.
&lt;/p&gt;

&lt;p&gt;
We include fonts, bitmaps and scalable, for a wide range of
computing devices. In the latest versions of NetBSD, the font size
will automatically scale with the screen size to support HiDPI displays
as well as small mobile devices.
However, we don&apos;t ship a scalable cursor theme at the moment.
We&apos;re also missing high-resolution fonts for Japanese,
a shame considering the popularity of NetBSD in Japan.
&lt;a href=&quot;https://koruri.github.io/&quot;&gt;Koruri&lt;/a&gt; looks interesting
and is suitably small, maybe we should import it.
&lt;/p&gt;

&lt;p&gt;
While we have many useful simple programs by default (a clock,
a calculator, an editor, a window manager, a compositor,
a terminal emulator...), we&apos;re notably missing a screen locking
program for X in the default install,
although we have &lt;a href=&quot;//man.NetBSD.org/lock.1&quot;&gt;lock(1) for the tty.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The big question - does all this have a future?
The good news is that all new hardware has generic support in X.
Someone writes either a modesetting kernel driver or a classical wsdisplay
kernel driver and they will be automatically supported by the associated
drivers in X.
The bad news is that to have applications running we require access to
a larger open source ecosystem, and that ecosystem has a lot of churn
and is easily distracted by shiny new squirrels.
The process of upstreaming stuff to X.Org is an ongoing process, but
it&apos;s likely we&apos;ll run into things that will never be suitable for upstream.
&lt;/p&gt;

&lt;p&gt;
Of course, on NetBSD, you also have the option of trying vanilla
modular X.Org from pkgsrc, or using
&lt;a href=&quot;https://www.youtube.com/watch?v=4igLujPyK0M&quot;&gt;something else entirely&lt;/a&gt;.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/the_geeks_way_of_checking</id>
        <title type="html">The Geeks way of checking what the outside wheather is like</title>
        <author><name>martin</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/the_geeks_way_of_checking"/>
        <published>2022-09-24T18:58:31+00:00</published>
        <updated>2022-09-24T18:58:31+00:00</updated> 
        <category term="/General" label="General" />
        <category term="weather" scheme="http://roller.apache.org/ns/tags/" />
        <category term="weather-station" scheme="http://roller.apache.org/ns/tags/" />
        <category term="ws3500" scheme="http://roller.apache.org/ns/tags/" />
        <category term="pkgsrc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;I recently had to replace my oldish WS2300 weather station, which was connected via a &lt;strong&gt;long&lt;/strong&gt; serial cable (running from my kitchen to the machine room in the basement) with a modern device, a WS3500. This now connects to my wifi network and logs data to a postgres server running on a tiny aarch64 SoC, which also provides a website to query the data.&lt;/p&gt;
&lt;p&gt;This all was done with minimal base systems means, plus very few additional pkgs from pkgsrc: in my case the postgres server, obviously, (or at least databases/postgresql14-client, if a postgres server already runs somewhere) and misc/sunwait used for a few site related calculations I found interesting to display. The only other suprising component used is pom(6) from the games set, used to calculate the phase of moon. The weather station displays this on its console, but it is not part of the reported weather data - but easy to recalculate.&lt;/p&gt;
&lt;p&gt;Part of this work was to analyze details of the ecowitt or the weather underground protocol and extracting data from it.&lt;/p&gt;
&lt;p&gt;The other part was creating two websites that display the current weather or some parts of the weather history.&lt;/p&gt;
&lt;p&gt;For the two last parts I took inspiration from previous work done on this by others, and overall it turned out to be straight forward.&lt;/p&gt;
</summary>
        <content type="html">&lt;h1&gt;Prologue&lt;/h1&gt;
&lt;p&gt;
When I bought my house in 2004 I went shopping for a outside thermometer - and ended up with a full weather-station instead (a WS2300). 
When I unpacked it I found a serial cable inside...&lt;/p&gt;
&lt;p&gt;
Long story short - I was still in the process of recabling the house (running ethernet to every room) and added a serial cable from the machine room to the WS2300,
and then did some pkgsrc work and got misc/open2300 and misc/open2300-mysql. I used those to log the data from the weather-station to a mysql database, and later
moved that (via misc/open2300-pgsql) to a postgres database.&lt;/p&gt;
&lt;p&gt;
Now sometime this year the machine running that database had to be replaced (should have done that earlier, it was power hungry and wasteful). The replacement was
an aarch64 SoC (a Pine64 Quartz64 model A) - and it had no real com ports (of course) any more. I had experimented with USB serial adapters and the WS2300 before,
but for unclear reasons this time I had no luck and couldn&apos;t get it to work. Since some of the outdoor sensors of the old weather-station had started failing, I decided
to replace it.&lt;/p&gt;

&lt;h1&gt;New Weather-Station, new Sensors&lt;/h1&gt;
&lt;p&gt;I picked a WS3500 because it comes with a nice remote sensor arrangement:&lt;/p&gt;
&lt;a href=&quot;//www.NetBSD.org/~martin/weather/ext_sensor.jpg&quot;&gt;&lt;img src=&quot;//www.NetBSD.org/~martin/weather/ext_sensor.jpg&quot; style=&quot;max-width:80%;&quot;/&gt;&lt;/a&gt;
&lt;p&gt;
I attached it to a satellite dish mount about 1.2m above my garage and ran a two wire cable through the mount to supply it with 3V and get rid of any batteries.
It does not have a connector for that, but the battery compartment had enough space for a 330&amp;micro;F elco and soldering that and the cable directly to the battery contacts was easy.&lt;/p&gt;
&lt;p&gt;The sensors report to the weather-station via a proprietary protocol in the 868 MHz band.&lt;/p&gt;

&lt;h1&gt;New Weather-Station, new Reporting&lt;/h1&gt;
&lt;p&gt;The weather-station can connect to a wifi network but does not offer any services itself.
The app used to configure the station offers several predefined weather collection services.&lt;/p&gt;
&lt;p&gt;
I found the idea a bit strange to have my local weather data logged to some server somewhere else in the cloud and then get it back via my browser, but for others this is a good thing.
I found this &lt;a href=&quot;https://www.linkedin.com/pulse/collecting-presenting-weather-sensor-data-using-ecowitts-jonas-frantz&quot;&gt;article&lt;/a&gt; that describes exactly the remote-only, no machines required on-site setup.
I used that article as inspiration for the data collection (but that part turned out to be quite trivial, see below) and copied a lot of the presentation site from it (also more details below).&lt;/p&gt;
&lt;p&gt;
So in my setup I created web servers on two dedicated ports of my tiny machine running the postgres server.
One is used by the weather-station for reporting the data, the other is used to query the database.&lt;/p&gt;
&lt;p&gt;
The configuration of the weather-station for a custom server was easy:&lt;/p&gt;
&lt;a href=&quot;http://netbsd.org/~martin/weather/screenshot1_app.jpg&quot;&gt;&lt;img src=&quot;//netbsd.org/~martin/weather/screenshot1_app.jpg&quot; style=&quot;max-width:80%;&quot;/&gt;&lt;/a&gt;
&lt;a href=&quot;http://netbsd.org/~martin/weather/screenshot2_app.jpg&quot;&gt;&lt;img src=&quot;//netbsd.org/~martin/weather/screenshot2_app.jpg&quot; style=&quot;max-width:80%;&quot;/&gt;&lt;/a&gt;
&lt;p&gt;
I tested the ecowitt protocol first. It uses a post to a fixed URL and the form data has nearly identical data as we get with the solution I ended up with - only a few names (of form fields)
are slightly different.
&lt;/p&gt;
&lt;p&gt;
The blacked items &quot;StationID&quot; and &quot;StationKey&quot; appear verbatim in the reported data, you can set them to whatever you want - the scripts below do not check them.&lt;/p&gt;
&lt;p&gt;
The weather underground protocol does a simple http GET and provides all data as query parameters (I had to add the trailing question mark in the configuration).
This makes it very easy to extract the data in a script on the server side.&lt;/p&gt;
&lt;p&gt;
But lets get there step by step. NetBSD comes with a http/https server in base, originally called &quot;bozohttpd&quot;. It is very lightweight, but it can run various types of scripts - I picked
the plain old simple CGI and /bin/sh as language, using a bit of awk to convert units.&lt;/p&gt;
&lt;p&gt;
First I added two users, so I could separate file access rights. This is how they look like in vipw:
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
weatherupdate:*************:1004:1004::0:0:Weather Update Service:/weather/home:/sbin/nologin
weatherquery:*************:1005:1004::0:0:Weather Query Service:/weather/query:/sbin/nologin
&lt;/pre&gt;
and two httpd instances for them
&lt;code&gt;/etc/inetd&lt;/code&gt; entry to collect the incoming data:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
88		stream	tcp	nowait:600	weatherupdate	/usr/libexec/httpd	httpd -q -c /weather/cgi /weather/files
89		stream	tcp	nowait:600	weatherquery	/usr/libexec/httpd	httpd -q -c /weather/cgi -M .js &quot;text/javascript&quot; - - /weather/files
&lt;/pre&gt;
&lt;p&gt;
The document root (&lt;code&gt;/weather/files&lt;/code&gt;) would not be used for the instance on port 88, but httpd needs one.
Note that these lines use the quiet flag (&quot;-q&quot;) which is only available in netbsd-current. You can replace it with &quot;-s&quot; for older versions.&lt;/p&gt;
&lt;p&gt;
The home directories of both users are mostly empty, besides a &lt;code&gt;.pgpass&lt;/code&gt; file that contains the password for this
user connection to the postgres server. They look like this:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
127.0.0.1:5432:weatherhistory:open2300:xxxxxxxxxxxxxx
&lt;/pre&gt;
&lt;p&gt;where &quot;weatherhistory&quot; is the datebase and &quot;open2300&quot; is the name of the postgres user for the update script and the password is x-ed out. The other file looks very similar:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
127.0.0.1:5432:weatherhistory:weatherquery:xxxxxxxxxxx
&lt;/pre&gt;
&lt;p&gt;
At the postgres level the user &quot;weatherquery&quot; needs to have SELECT privilege on the table &quot;weather&quot;, and &quot;open2300&quot; needs to have INSERT privilege.
The table schema (output of &quot;pg_dump -s&quot;) looks like this:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
--
-- Name: weather; Type: TABLE; Schema: public; Owner: weathermaster
--

CREATE TABLE public.weather (
    &quot;timestamp&quot; timestamp without time zone DEFAULT &apos;1970-01-01 00:00:00&apos;::timestamp without time zone NOT NULL,
    temp_in double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    temp_out double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    dewpoint double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    rel_hum_in integer DEFAULT 0 NOT NULL,
    rel_hum_out integer DEFAULT 0 NOT NULL,
    windspeed double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    wind_angle double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    wind_chill double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    rain_1h double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    rain_24h double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    rain_total double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    rel_pressure double precision DEFAULT &apos;0&apos;::double precision NOT NULL,
    wind_gust double precision DEFAULT 0 NOT NULL,
    light double precision DEFAULT 0 NOT NULL,
    uvi double precision DEFAULT 0 NOT NULL
);

ALTER TABLE public.weather OWNER TO weathermaster;

--
-- Name: weather weather_pkey; Type: CONSTRAINT; Schema: public; Owner: weathermaster
--
ALTER TABLE ONLY public.weather
    ADD CONSTRAINT weather_pkey PRIMARY KEY (&quot;timestamp&quot;);

--
-- Name: TABLE weather; Type: ACL; Schema: public; Owner: weathermaster
--
GRANT INSERT ON TABLE public.weather TO open2300;
GRANT SELECT ON TABLE public.weather TO weatherquery;
&lt;/pre&gt;
&lt;p&gt;
As noted above, I carried this database over (with minor modifications) from previous instances of the whole setup - so it may not be optimal or elegant.
One thing that needs special attention is the &quot;timestamp&quot; column - it carries date/time in UTC and has no timezone associated.
This looked like a natural choice, but has some unexpected consequences.
When querying data in JSON format, &quot;timestamp&quot; will not get the JavaScript marker for &quot;UTC&quot;, a &quot;Z&quot; suffix. So in the JavaScript code in the web pages
you will find quite a few places that cover up for this.&lt;/p&gt;
&lt;p&gt;
Now when the weather station sends data to the configured server, inetd(8) runs httpd(8) and that invokes a shell script &lt;code&gt;/weather/cgi/update.cgi&lt;/code&gt; 
as the &quot;weatherupdate&quot; user.
This script uses awk(1) to do a few unit conversions and output a SQL command to insert the data into the &quot;weather&quot; table.
This SQL command is then piped to psql(1) with the connection string passed on the command line.
The corresponding password is found in &lt;code&gt;~/.pgpass&lt;/code&gt; of the &quot;weatherupdate&quot; user.&lt;/p&gt;
&lt;p&gt;
The script looks like this:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
#! /bin/sh

TZ=UTC; export TZ

awk -v $( echo &quot;$QUERY_STRING&quot; | sed &apos;s/\&amp;/ -v /g&apos; ) &apos;BEGIN {

temp=(tempf-32)/1.8;
indoortemp=(indoortempf-32)/1.8;
dewpt=(dewptf-32)/1.8;
windchill=(windchillf-32)/1.8;
windspeed=windspeedmph*1.609344;
windgust=windgustmph*1.609344;
rain=rainin*25.4;
dailyrain=dailyrainin*25.4;
totalrain=totalrainin*25.4;
rel_preasure=baromin/0.029529980164712;

printf(&quot;INSERT INTO weather VALUES (&apos;&quot;&apos;&quot;&apos;%s&apos;&quot;&apos;&quot;&apos;, %f, %f, %f, %d, %d, %f, %d, %f, %f, %f, %f, %f, %f, %f, %f);\n&quot;,
	strftime(&quot;%F %T&quot;),
	indoortemp,
	temp,
	dewpt,
	indoorhumidity,
	humidity,
	windspeed,
	winddir,
	windchill,
	rain, dailyrain, totalrain,
	rel_preasure,
	windgust,
	solarradiation, UV);

}&apos; | psql &quot;hostaddr=&apos;127.0.0.1&apos;dbname=&apos;weatherhistory&apos;user=&apos;open2300&apos;&quot; &gt; /dev/null 2&gt;&amp;1
&lt;/pre&gt;
&lt;p&gt;
Note that it explicitly sets the timezone to UTC.
The input data comes (as defined by CGI) via the QUERY_STRING environment variable, as a set of &quot;field=value&quot; items, separated by &amp;amp;.
They are converted to sets of &quot;-v&quot; args for the awk invocation via a simple sed script.&lt;/p&gt;
&lt;p&gt;
With this in place, the weather-station adds a record every five minutes to the database, and it was fun to check it via SQL,
but for reasons not quite clear to me most of the rest of the family did not like that kind of access very much.&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
psql (14.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type &quot;help&quot; for help.

weatherhistory=&gt; select min(temp_out), max(temp_out) from weather;
  min  | max  
-------+------
 -18.1 | 80.9
(1 row)
&lt;/pre&gt;
&lt;p&gt;
I initially thought the 80.9&amp;deg;C were measured while I was soldering the power cable, but apparently they were fallout from the sometimes failing
sensors of the old station. The database has 2840 rows with temp_out &gt; 40&amp;deg;C and all of them are 80.something. I should replace them with an average of the neighbor
records.&lt;/p&gt;

&lt;h1&gt;Presenting the data&lt;/h1&gt;
&lt;p&gt;
So I needed an internal web site. Which needs access to the data.
The above setup already paved the way for that, via the second port I set up.
I wanted to show all the current data in one page, and variable history data on another - which meant two CGI scripts to query the data.
The &lt;code&gt;/weather/cgi/latest.cgi&lt;/code&gt; script just fetches the last record logged and creates a JSON from it, and also uses pom(6) and the sunwait(1) program
from pkgsrc to supply some site and date specific data:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
#! /bin/sh

PATH=/usr/games:/usr/pkg/bin:$PATH

GEOPOS=&quot;51.505554N 0.075278W&quot;	# geographic position of this weather station
UPDATE=300			# seconds between updates

# This script uses psql(1) from pkgsrc/databases/postgresql14-client,
# pom(6) from the NetBSD games set and pkgsrc/misc/sunwait.

# collect global site data: sunrise and friends
eval $( sunwait report ${GEOPOS} | awk -F&quot;: &quot; &apos;
	/Sun directly north/	{
		printf(&quot;zenith=\&quot;%s\&quot;\n&quot;, $2);
	}
	/Daylight:/		{
		split($2,v,&quot; to &quot;);
		printf(&quot;sunrise=\&quot;%s\&quot;\nsunset=\&quot;%s\&quot;\n&quot;, v[1], v[2]);
	}
	/with Civil twilight:/	{
		split($2,v,&quot; to &quot;);
		printf(&quot;dawn=\&quot;%s\&quot;\ndusk=\&quot;%s\&quot;\n&quot;, v[1], v[2]);
	}
	/It is: Day/ {
		printf(&quot;day=true\n&quot;);
	}
	/It is: Night/ {
		printf(&quot;day=false\n&quot;);
	}
&apos; )

# moon phase
eval $( pom | awk &apos;-F(&apos;	&apos;
	/The Moon is Full/	{ printf(&quot;moontrend=\&quot;-\&quot;\nmoon=100\n&quot;); }
	/The Moon is New/	{ printf(&quot;moontrend=\&quot;+\&quot;\nmoon=0\n&quot;); }
	/First Quarter/		{ printf(&quot;moontrend=\&quot;+\&quot;\nmoon=50\n&quot;); }
	/Last Quarter/		{ printf(&quot;moontrend=\&quot;-\&quot;\nmoon=50\n&quot;); }
	/Waxing/		{
		a=$0;
		sub(/^.*\(/, &quot;&quot;, a);
		sub(/%.*$/, &quot;&quot;, a);
		printf(&quot;moontrend=\&quot;+\&quot;\nmoon=%d\n&quot;, a+0);
	}
	/Waning/		{
		a=$0;
		sub(/^.*\(/, &quot;&quot;, a);
		sub(/%.*$/, &quot;&quot;, a);
		printf(&quot;moontrend=\&quot;-\&quot;\nmoon=%d\n&quot;, a+0);
	}
&apos; )

# start the json output
printf &quot;\n\n{ \&quot;site\&quot;: { \&quot;updates\&quot;: ${UPDATE},
	\&quot;dawn\&quot;: \&quot;${dawn}\&quot;, \&quot;sunrise\&quot;: \&quot;${sunrise}\&quot;,
	\&quot;zenith\&quot;: \&quot;${zenith}\&quot;, \&quot;day\&quot;: ${day},
	\&quot;sunset\&quot;: \&quot;${sunset}\&quot;, \&quot;dusk\&quot;: \&quot;${dusk}\&quot;,
	\&quot;moon\&quot;: { \&quot;trend\&quot;: \&quot;${moontrend}\&quot;, \&quot;percent\&quot;: ${moon} }\n}, \&quot;weather\&quot;:\n&quot;

# fill database results
printf &quot;WITH t AS ( SELECT * FROM weather ORDER BY timestamp DESC LIMIT 1 ) SELECT row_to_json(t) FROM t;\n&quot; |
	psql --tuples-only --no-align &quot;hostaddr=&apos;127.0.0.1&apos;dbname=&apos;weatherhistory&apos;user=&apos;weatherquery&apos;&quot;

# terminate json
printf &quot;\n}\n&quot;
&lt;/pre&gt;
&lt;p&gt;
As you can see, if you would restrict output to plain data from the database, the script would be only four or five lines long.
But I like the additional spicing.&lt;/p&gt;
&lt;p&gt;
The &lt;code&gt;/weather/cgi/history.cgi&lt;/code&gt; script fetches rows between two timestamps passed to it (in JSON timestamp format)
and answers with a JSON containing an array of all the data in the requested time window:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
#! /bin/sh

COND=$( echo &quot;${QUERY_STRING}&quot; | tr &apos;&amp;&apos; &apos;\n&apos;| sed -e &apos;s/%22/\&quot;/g&apos; -e &apos;s/%3A/:/g&apos; | awk &apos;
	/from=/	{ v=$0; sub(/^[^&quot;]*\&quot;/, &quot;&quot;, v); sub(/\&quot;.*$/, &quot;&quot;, v); arg_from=v; }
	/to=/	{ v=$0; sub(/^[^&quot;]*\&quot;/, &quot;&quot;, v); sub(/\&quot;.*$/, &quot;&quot;, v); arg_to=v; }
	END	{
		if (arg_from &amp;&amp; arg_to) {
			printf(&quot;timestamp &gt;= &apos;&quot;&apos;&quot;&apos;%s&apos;&quot;&apos;&quot;&apos; AND timestamp &lt;= &apos;&quot;&apos;&quot;&apos;%s&apos;&quot;&apos;&quot;&apos;\n&quot;,
			    arg_from, arg_to);
		}
	}
&apos; )

if [ -z &quot;${COND}&quot; ]; then
	# printf &quot;could not parse: ${QUERY_STRING}\n&quot; &gt;&gt; /tmp/sql.log
	exit 0;
fi

# start output
printf &quot;\n\n&quot;

# printf &quot;${COND}\n&quot; &gt;&gt; /tmp/sql.log

# fill database results
printf &quot;WITH t AS ( SELECT * FROM weather WHERE ${COND} ORDER by timestamp ASC ) SELECT json_agg(t) FROM t;\n&quot; |
	psql --tuples-only --no-align &quot;hostaddr=&apos;127.0.0.1&apos;dbname=&apos;weatherhistory&apos;user=&apos;weatherquery&apos;&quot; # 2&amp;&gt;&gt; /tmp/sql.err
&lt;/pre&gt;
&lt;p&gt;
Fetching this data now is easy in JavaScript.&lt;/p&gt;
&lt;p&gt;
We have a request URL defined as a const, like this:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
const queryURL = &apos;http://weatherhost.duskware.de:89/cgi-bin/history.cgi?&apos;;
&lt;/pre&gt;
&lt;p&gt;and then add (if needed) the paramaters for the query, like in this example function that gets passed a from-date and a to-date:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
function showData(fromD, toD)
{
        var url = new URL(queryURL);
        url.searchParams.append(&quot;from&quot;, &apos;&quot;&apos;+fromD.toJSON()+&apos;&quot;&apos;);
        url.searchParams.append(&quot;to&quot;, &apos;&quot;&apos;+toD.toJSON()+&apos;&quot;&apos;);
        fetch(url).then(function(response) {
                return response.json();
        }).then(function(data) {
                makeGraphs(data);
                updateButtons();
        }).catch(function(error) {
                console.error(error)
        });   
}
&lt;/pre&gt;
&lt;p&gt;
When the answer from the server arrives, it is decoded as JSON and returned as input data to the next function that makes some graphs from the data array.
Finally a few buttons are updated (in this example the time window is put into a start and a end date control.&lt;/p&gt;
&lt;p&gt;
Inspired by the &lt;a href=&quot;https://www.linkedin.com/pulse/collecting-presenting-weather-sensor-data-using-ecowitts-jonas-frantz&quot;&gt;post&lt;/a&gt;
mentioned above I used &lt;a href=&quot;https://canvas-gauges.com/&quot;&gt;canvas gauges&lt;/a&gt; for the display of the latest data
and &lt;a href=&quot;https://dygraphs.com/&quot;&gt;dygraphs&lt;/a&gt; for the display of historic data.&lt;/p&gt;
&lt;p&gt;
Here is an example of how the latest display looks:&lt;/p&gt;
&lt;a href=&quot;//www.NetBSD.org/~martin/weather/website_weather.png&quot;&gt;&lt;img src=&quot;//www.NetBSD.org/~martin/weather/website_weather.png&quot; style=&quot;max-width:80%;&quot;/&gt;&lt;/a&gt;
&lt;p&gt;
And here is how the history display looks:&lt;/p&gt;
&lt;a href=&quot;//www.NetBSD.org/~martin/weather/website_weatherhistory.png&quot;&gt;&lt;img src=&quot;//www.NetBSD.org/~martin/weather/website_weatherhistory.png&quot; style=&quot;max-width:80%;&quot;/&gt;&lt;/a&gt;
&lt;p&gt;
I have put an archive of the cgi scripts and web pages &lt;a href=&quot;//www.NetBSD.org/~martin/weather/weather.tgz&quot;&gt;here&lt;/a&gt;, and also for the curious who just 
want to peek at the full glory of my web design skills the &lt;a href=&quot;//www.NetBSD.org/~martin/weather/index.html&quot;&gt;start page&lt;/a&gt; (showing the latest weather data)
and the &lt;a href=&quot;//www.NetBSD.org/~martin/weather/history.html&quot;&gt;history page&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Besides those files, you will need&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;a &lt;code&gt;/weather/files/favicon.ico&lt;/code&gt; if you like.&lt;/li&gt;
  &lt;li&gt;download &lt;code&gt;gauge.min.js&lt;/code&gt; from canvas gauges and put it into &lt;code&gt;/weather/files/&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;download &lt;code&gt;dygraph.css&lt;/code&gt;, &lt;code&gt;dygraph.min.js&lt;/code&gt; from dygraph, plus &lt;code&gt;synchronizer.js&lt;/code&gt; from the dygraph &lt;code&gt;extras/&lt;/code&gt;
       directory and put it also into &lt;code&gt;/weather/files/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Then you should be ready to go - easy, isn&apos;t it? And no heavy weight dependencies or pkgs needed.&lt;/p&gt;
&lt;h1&gt;What about other weather stations?&lt;/h1&gt;
&lt;p&gt;
There are quite a few similar weather stations out there now that seem to run &quot;related&quot; firmware and have similar capabilities.
Most likely the update script (and details in the presentation pages) will need adjustements for other types.&lt;/p&gt;
&lt;p&gt;
If you start with a different device, just log all the data it sends and adjust the cgi scripts/database/JavaScript accordingly.
For protocol analyzis there are several easy means:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Remove the &quot;-q&quot; flag in the httpd command (in &lt;code&gt;/etc/inetd.conf&lt;/code&gt;)  and check &lt;code&gt;/var/log/xferlog&lt;/code&gt; for the quey paramaters sent by the
        weather station (when using the weather underground protocol).&lt;/li&gt;
  &lt;li&gt;Make the station log to a &lt;code&gt;debug.cgi&lt;/code&gt; first to capture everything (including form data posted). This works for the ecowitt protocoll.&lt;/li&gt;
  &lt;li&gt;All this stations seem to use http only (not https), so you can sniff the traffic. Use &lt;code&gt;tcpdump -w&lt;/code&gt; on the server to capture the data and
       analyze it with net/wireshark from pkgsrc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is what a debug.cgi script could look like:&lt;/p&gt;
&lt;pre style=&quot;background-color:lightgoldenrodyellow;&quot;&gt;
#! /bin/sh
env &gt; /tmp/debug.env
printf &quot;\n\nOK\n&quot;
cat &gt; /tmp/debug.input &amp;
&lt;/pre&gt;
&lt;p&gt;
This allows you to see the form input in /tmp/debug.input and the CGI environment in /tmp/debug.env.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code3</id>
        <title type="html">Announcing Google Summer of Code 2022 projects</title>
        <author><name>Andrius Varanavicius</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code3"/>
        <published>2022-05-22T12:20:02+00:00</published>
        <updated>2022-05-22T12:20:02+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;//www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&apos; style=&quot;width: 80px; height: 80px; float: right;&quot; /&gt;&lt;/a&gt;
The NetBSD Foundation has finalized the list of projects for this year&#8217;s &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/organizations/the-netbsd-foundation&quot;&gt;Google Summer of Code&lt;/a&gt;. The contributors and projects are the following:
&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Brian Schnepp - &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/esA98HIB&quot;&gt;Raspberry Pi GPU Driver&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Arjun Bemarkar - &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/LDY5asp0&quot;&gt;inetd enhancements&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Piyush Sachdeva - &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/37Q8OZNU&quot;&gt;Emulating missing linux syscalls&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Vihas Makwana - &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/yO4fTbNn&quot;&gt;Introduce a new Wi-Fi driver&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Vivek Kumar Sah - &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/projects/UPlZRXS6&quot;&gt;Automating donor acknowledgement and information storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The community bonding period has already started (from May 20) and it will last until June 12. During this time, the contributors are expected to coordinate with their mentors and community. 
&lt;/p&gt;

&lt;p&gt;
This will be immediately followed by the coding period from June 13 to September 4. After which, the contributors are expected to submit their final work, evaluate their mentors, and get evaluated by their mentors as well. 
Results will be announced on September 20.
&lt;/p&gt;

&lt;p&gt;
For more information about the Google Summer of Code 2022 kindly refer to the official &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC website&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;
We would like to express our gratitude to Google for organizing the yearly GSoC, and to The NetBSD Foundation mentors and administrators for their efforts and hardwork!
&lt;/p&gt;

&lt;p&gt;
Let us welcome all the contributors to our growing NetBSD community!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/the_netbsd_foundation_is_a</id>
        <title type="html">The NetBSD Foundation is a mentoring organization at Google Summer of Code 2022</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/the_netbsd_foundation_is_a"/>
        <published>2022-03-16T17:02:15+00:00</published>
        <updated>2022-03-16T17:07:32+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="tnf" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;https://developers.google.com/open-source/gsoc/resources/downloads/GSoC-Horizontal.png&apos; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
We are happy to announce that The NetBSD Fundation is a &lt;a href=&quot;https://summerofcode.withgoogle.com/programs/2022/organizations/the-netbsd-foundation&quot;&gt;mentoring organization&lt;/a&gt; at &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code 2022&lt;/a&gt;!
&lt;/p&gt;

&lt;p&gt;
Would you like to contribute to NetBSD or pkgsrc during the summer? Please give a look to &lt;a href=&quot;https://wiki.NetBSD.org/projects/gsoc/&quot;&gt;NetBSD wiki Google Summer of Code page&lt;/a&gt; with possible ideas list and/or please join &lt;a href=&quot;https://web.libera.chat/#NetBSD-code&quot;&gt;#NetBSD-code&lt;/a&gt; IRC channel on &lt;a href=&quot;https://libera.chat/&quot;&gt;libera&lt;/a&gt; or get in touch with us via &lt;a href=&quot;https://www.NetBSD.org/mailinglists/&quot;&gt;mailing lists&lt;/a&gt; to propose new projects!
&lt;/p&gt;

&lt;p&gt;
Please note that unlike past years where Google Summer of Code was opened only to university students since this year if you are 18 or older you can be a GSoC contributor.
&lt;/p&gt;

&lt;p&gt;
For more information about Google Summer of Code please give a look to the official &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;GSoC website&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Looking forward to have a nice Google Summer of Code!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/making_rockpro64_a_netbsd_server</id>
        <title type="html">Making RockPro64 a NetBSD Server</title>
        <author><name>matthew green</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/making_rockpro64_a_netbsd_server"/>
        <published>2022-03-09T23:57:54+00:00</published>
        <updated>2022-03-09T23:57:54+00:00</updated> 
        <category term="/General" label="General" />
        <category term="rockpro64" scheme="http://roller.apache.org/ns/tags/" />
        <category term="aarch64" scheme="http://roller.apache.org/ns/tags/" />
        <category term="pine64" scheme="http://roller.apache.org/ns/tags/" />
        <category term="evbarm" scheme="http://roller.apache.org/ns/tags/" />
        <category term="aarch64eb" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;The time has come to upgrade my SunBlade 2500s to something more power friendly and faster.  I&apos;d already removed one CPU and thus half the ram from two of these systems to reduce their power consumption, but it&apos;s still much higher than it could be.&lt;/p&gt;

&lt;p&gt;After much searching, I&apos;ve decided on &lt;a href=&quot;https://wiki.pine64.org/wiki/ROCKPro64&quot;&gt;Pine64&apos;s RockPro64&lt;/a&gt; 4GiB ram model (technically, only 3.875GiB ram.)  Pine64 make SBCs, laptops, phones, and various other mostly ARM gadgets, and the RockPro64 has the fastest CPU they ship (Rockchip RK3399), and can use a small &quot;NAS Case&quot;, that is sufficient to house 2 HDDs and, at a stretch, upto 6 SSDs (cooling would become quite an issue at this point.)&lt;/p&gt;

&lt;p&gt;In my SATA setup, I have 3 SSDs with a JMicron 585 card in the PCIe slot, two SSDs in the NAS case SSD region, and the third is in the HDD region with an adapter.  I have used two SATA power splitters to convert the NAS case&apos;s 2 SATA power ports into 4, with the 4th one also powering a Noctua case fan.  The cabling is not great with this, with enough SATA power cabling for 6 devices to lay.  Probably a bespoke power cable to connect to the RockPro64 would make this nicer and probably improve cooling slightly, but I&apos;m just using off-the-shelf components for now.&lt;/p&gt;


&lt;p&gt;In the last year or so I&apos;ve been working on making NetBSD/arm64 big-endian more featureful.  In particular, I&apos;ve added support for:
&lt;ul&gt;&lt;li&gt;other-endian access disklabels, FFS file-systems in the NetBSD libsa&lt;/li&gt;
&lt;li&gt;the &quot;look 64 sectors later&quot; for RAIDFrame partitions in MI efiboot (the x86 specific efiboot has more extensive support for this that should be ported over)&lt;/li&gt;
&lt;li&gt;other-endian access to RAIDFrame labels in the kernel&lt;/li&gt;
&lt;li&gt;updated the U-Boot package and featureset to include AHCI/SATA support, workaround some bugs and fix the newer U-Boot SPI loader location, and figured out how to default loading from either SATA or NVMe&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;There are not too many special actions needed for this sort of setup compared to a normal NetBSD or Arm system.  While I built my installations by hand, the standard NetBSD Arm images are suitable for this task.  It&apos;s easiest to start from an SD card with the RockPro64 u-boot installed.  There are two U-Boot images available, one for SD/eMMC, and one for SPI (there is an odd problem with the early SPI loader that requires a portion of the image to be different.)  The pkgsrc package for sysutils/u-boot-rockpro64 version 2022.01 has these suggested methods for installing the U-Boot image (this package should be buildable on any supported pkgsrc platform).&lt;/p&gt;

&lt;p&gt;To install U-Boot into the SD/eMMC card (can run on any system, the image must be written at 32KiB into the device):
&lt;pre&gt;
# dd if=/usr/pkg/share/u-boot/rockpro64/rksd_loader.img seek=64 of=/dev/rld0c
&lt;/pre&gt;
&lt;p&gt;
To install U-Boot into the SPI flash (must be run on the host, and lives at the very start of the device:
&lt;pre&gt;
# dd if=/usr/pkg/share/u-boot/rockpro64/rkspi_loader.img bs=64k of=/dev/spiflash0
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;When booting from NVMe or SATA, one must drop to the U-Boot prompt and adjust the &quot;boot_targets&quot; value to put scsi* (SATA) or nvme* ahead of the mmc* and usb* options.&lt;/p&gt;

&lt;p&gt;The original value for me:
&lt;pre&gt;
=&gt; printenv boot_targets
boot_targets=mmc1 usb0 mmc0 nvme0 scsi0 pxe dhcp sf0
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;Which is then adjusted and saved with eg:
&lt;pre&gt;
=&gt; setenv boot_targets nvme0 scsi0 mmc1 usb0 mmc0 pxe dhcp sf0
=&gt; saveenv
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;(In this list, mmc1 is the SD slot, mmc0 is the eMMC card, pxe and dhcp are netbooting, and sf0 attempts to load further U-Boot scripts from SPI.)&lt;/p&gt;

&lt;p&gt;There are some minor issues with the RockPro64.  It has no ability to use ECC memory.  It only comes with 1 PCIe 4x slot, and Rockchip errata limited this to PCIe 1.x (though no NetBSD users encounted any issues with PCIe 2.x enabled, and this can be forced back on via a DTS patch.)  It is possible to use a PCIe bridge (I have never done this, though I would like to try in the future) to enable more devices for booting, or to enable both a network and storage device.&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/public_netbsd_irc_channels_moved</id>
        <title type="html">Public NetBSD IRC chat channels moved to Libera</title>
        <author><name>Nia Alarie</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/public_netbsd_irc_channels_moved"/>
        <published>2021-05-30T18:23:29+00:00</published>
        <updated>2021-05-30T18:24:49+00:00</updated> 
        <category term="/General" label="General" />
        <summary type="html">&lt;pHi everyone,&lt;/p&gt;

&lt;p&gt;Due to the unfortunate situation regarding changes in administration on
freenode.net, and the resulting chaos, we have decided to move the public
NetBSD IRC channels from freenode to irc.libera.chat.&lt;/p&gt;
   
&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#NetBSD&quot;&gt;#NetBSD&lt;/a&gt; - general discussion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#netbsd-code&quot;&gt;#netbsd-code&lt;/a&gt; - development discussion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#pkgsrc&quot;&gt;#pkgsrc&lt;/a&gt; - pkgsrc (primarily development) discussion&lt;/li&gt;
&lt;/ul&gt;
  
&lt;p&gt;You can find information on connecting to Libera at &lt;a href=&quot;https://libera.chat&quot;&gt;https://libera.chat/&lt;/a&gt;&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;Due to the unfortunate situation regarding changes in administration on
freenode.net, and the resulting chaos, we have decided to move the public
NetBSD IRC chat channels from freenode to irc.libera.chat.&lt;/p&gt;
   
&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#NetBSD&quot;&gt;#NetBSD&lt;/a&gt; - general discussion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#netbsd-code&quot;&gt;#netbsd-code&lt;/a&gt; - development discussion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.libera.chat/#pkgsrc&quot;&gt;#pkgsrc&lt;/a&gt; - pkgsrc (primarily development) discussion&lt;/li&gt;
&lt;/ul&gt;
  
&lt;p&gt;You can find information on connecting to Libera at &lt;a href=&quot;https://libera.chat&quot;&gt;https://libera.chat/&lt;/a&gt;&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/allen_k_briggs_memorial_scholarship</id>
        <title type="html">Allen K. Briggs Memorial Scholarship</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/allen_k_briggs_memorial_scholarship"/>
        <published>2020-12-21T11:37:59+00:00</published>
        <updated>2020-12-21T11:37:59+00:00</updated> 
        <category term="/General" label="General" />
        <content type="html">&lt;p&gt;
Allen Briggs was one of the earliest members of the NetBSD community,
pursuing his interest in macBSD, and moving to become a NetBSD
developer when the two projects merged.  Allen was known for his
quiet and relaxed manner, and always brought a keen wisdom with
him; allied with his acute technical expertise, he was one of the
most valued members of the NetBSD community.
&lt;/p&gt;

&lt;p&gt;
He was a revered member of the NetBSD core team, and keenly involved
in many aspects of its application; from working on ARM chips to
helping architect many projects, Allen was renowned for his expertise.
He was a distinguished engineer at Apple, and used his NetBSD
expertise there to bring products to market.
&lt;/p&gt;

&lt;p&gt;
Allen lived in Blacksburg Virginia with his wife and twin boys and
was active with various community volunteer groups.   His family
touched the families of many other NetBSD developers and those
friendships have endured beyond his passing.
&lt;/p&gt;

&lt;p&gt;
We have received the following from Allen&apos;s family and decided to
share it with the NetBSD community.  If you can, we would ask you
to consider contributing to his Memorial Scholarship.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.ncssm.edu/donate/distance-education/allen-k-briggs-88-memorial-scholarship&quot;&gt;https://www.ncssm.edu/donate/distance-education/allen-k-briggs-88-memorial-scholarship&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
The Allen K. Briggs Memorial Scholarship is an endowment to provide
scholarships in perpetuity for summer programs at the North Carolina
School of Science &amp; Math, which Allen considered to be a place that
fundamentally shaped him as a person. We would love to invite
Allen&apos;s friends and colleagues from the BSD community to donate to
this cause so that we can provide more scholarships to students
with financial need each year. We are approximately halfway to our
goal of $50K with aspirations to exceed that target and fund
additional scholarships.
&lt;/p&gt;

&lt;p&gt;
Two quick notes on donating: &lt;strong&gt;Important!&lt;/strong&gt; When donating, you must
select &quot;Allen K. Briggs Memorial Scholarship&quot; under designation
for the donation to be routed to the scholarship If you have the
option to use employer matching (i.e., donating to NCSSM through
an employer portal to secure a match from your employer), please
email the NCSSM Foundation&apos;s Director of Development, April Horton
(&lt;code&gt;april.horton@ncssm.edu&lt;/code&gt;), after donating to let her know you want
your gift and employer match to go to the Allen K. Briggs Memorial
Scholarship Thanks in advance for your help. I&apos;d be happy to answer
any questions you or any others have about this.
&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/default_window_manager_switched_to</id>
        <title type="html">Default window manager switched to CTWM in NetBSD-current</title>
        <author><name>Nia Alarie</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/default_window_manager_switched_to"/>
        <published>2020-09-28T08:33:28+00:00</published>
        <updated>2020-09-28T17:42:32+00:00</updated> 
        <category term="/General" label="General" />
        <summary type="html">&lt;p&gt;
For more than 20 years, NetBSD has shipped X11 with the &quot;classic&quot; default window manager of twm. However, it&apos;s been showing its age for a long time now.
&lt;/p&gt;
&lt;p&gt;
In 2015, ctwm was imported, but after that no progress was made. ctwm is a fork of twm with some extra features - the primary advantages are that it&apos;s still incredibly lightweight, but highly configurable, and has support for virtual desktops, as well as a NetBSD-compatible license and ongoing development. Thanks to its configuration options, we can provide a default experience that&apos;s much more usable to people experienced with other operating systems.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
For more than 20 years, NetBSD has shipped X11 with the &quot;classic&quot; default window manager of twm. However, it&apos;s been showing its age for a long time now.
&lt;/p&gt;
&lt;p&gt;
In 2015, ctwm was imported, but after that no progress was made. ctwm is a fork of twm with some extra features - the primary advantages are that it&apos;s still incredibly lightweight, but highly configurable, and has support for virtual desktops, as well as a NetBSD-compatible license and ongoing development. Thanks to its configuration options, we can provide a default experience that&apos;s much more usable to people experienced with other operating systems.
&lt;/p&gt;
&lt;p&gt;
Recently, I&apos;ve been installing NetBSD with some people in real life and was inspired by their reactions to the default twm to improve the situation, so I played with ctwm, wrote a config, and used it myself for a week. It&apos;s now the default in NetBSD-current.
&lt;/p&gt;
&lt;a href=&quot;https://ftp.netbsd.org/pub/NetBSD/misc/nia/images/desktop.png&quot;&gt;&lt;img src=&quot;https://ftp.netbsd.org/pub/NetBSD/misc/nia/images/desktop.png&quot; alt=&quot;&quot; style=&quot;max-width: 750px;&quot;&gt;&lt;/a&gt;
&lt;p&gt;
We gain some nice features like an auto-generated application menu (that will fill up as packages are installed to /usr/pkg), and a range of useful keyboard shortcuts including volume controls - the default config should be fully usable without a mouse. It should also work at a range of screen resolutions. We can add HiDPI support after some larger bitmap fonts are imported - another advantage of ctwm is that we can support very slow and very fast hardware with one config.
&lt;/p&gt;
&lt;p&gt;
If you&apos;re curious about ctwm, check out the &lt;a href=&quot;https://www.ctwm.org/index.html&quot;&gt;ctwm website&lt;/a&gt;. It&apos;s also included in previous NetBSD releases, though not as the default window manager and not with this config.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_third</id>
        <title type="html">GSoC Reports: Benchmarking NetBSD, third evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_third"/>
        <published>2020-09-12T08:29:06+00:00</published>
        <updated>2020-09-12T08:29:06+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc2020" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="benchmarks" scheme="http://roller.apache.org/ns/tags/" />
        <category term="pkgsrc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code 2020.&lt;/p&gt;

&lt;p&gt;This blog post is in continuation of
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first&quot;&gt;GSoC Reports: Benchmarking NetBSD, first evaluation report&lt;/a&gt;
and &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_second&quot;&gt;GSoC Reports: Benchmarking NetBSD, second evaluation report&lt;/a&gt;
blogs, and describes my progress in the final phase of GSoC 2020 under
The NetBSD Foundation.&lt;/p&gt;
&lt;p&gt;In the third phase, I upgraded to the latest stable version
&lt;a href=&quot;https://www.phoronix-test-suite.com/&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt; 9.8.0 in
pkgsrc-wip, resolved the TODOs and created patches for more
test-profiles to fix their installation and runtime errors on
NetBSD-current.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code 2020.&lt;/p&gt;

&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This blog post is in continuation of
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first&quot;&gt;GSoC Reports: Benchmarking NetBSD, first evaluation report&lt;/a&gt;
and &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_second&quot;&gt;GSoC Reports: Benchmarking NetBSD, second evaluation report&lt;/a&gt;
blogs, and describes my progress in the final phase of GSoC 2020 under
The NetBSD Foundation.&lt;/p&gt;
&lt;p&gt;In the third phase, I upgraded to the latest stable version
&lt;a href=&quot;https://www.phoronix-test-suite.com/&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt; 9.8.0 in
pkgsrc-wip, resolved the TODOs and created patches for more
test-profiles to fix their installation and runtime errors on
NetBSD-current.&lt;/p&gt;

&lt;h2&gt;Progress in the third phase of GSoC&lt;/h2&gt;
&lt;h3&gt;wip/phoronix-test-suite TODO and update&lt;/h3&gt;
&lt;p&gt;As a newer stable version of the Phoronix Test Suite was available in
upstream, I upgraded the Phoronix Test Suite from version 9.6.1 to
9.8.0 in pkgsrc-wip and is available as
&lt;a href=&quot;https://pkgsrc.se/wip/phoronix-test-suite&quot;&gt;wip/phoronix-test-suite&lt;/a&gt;.
You can have a look at the
&lt;a href=&quot;https://github.com/phoronix-test-suite/phoronix-test-suite/blob/master/ChangeLog&quot;&gt;PTS Changelog&lt;/a&gt;
to know about the improvements between these two versions.&lt;/p&gt;
&lt;p&gt;To get the package ready for merge in pkgsrc upstream, I also resolved
the pkgsrc-wip TODOs.&lt;/p&gt;
&lt;h4&gt;pkgsrc-wip commits:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NetBSD/pkgsrc-wip/commit/77ef21385452fe098abb12f7772ac21f0aeb7f86&quot;&gt;wip/phoronix-test-suite: update phoronix-test-suite to 9.8.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NetBSD/pkgsrc-wip/commit/7162cf86c3fced1702a4446d514b76640d7266f3&quot;&gt;Resolved the pending TODOs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If any new problems are encountered, please document them in
&lt;code&gt;wip/phoronix-test-suite/TODO&lt;/code&gt; file and/or contact me.&lt;/p&gt;
&lt;h3&gt;Testing of automated benchmarking framework&lt;/h3&gt;
&lt;p&gt;I had been assigned a remote testing machine having Intel 6138 dual
processor, 40 cores, 80 threads, 192GB of RAM. I spent time reproducing
my automated framework i.e., Phoromatic-Anita Integration on the
machine. I was able to reproduce the integration framework working
without networking configuration, but the network bridge needs to be
setup on the remote machine and the integration script to be tested
with it. I shall continue this task in the post-GSoC period.&lt;/p&gt;
&lt;h4&gt;Benchmarking Results&lt;/h4&gt;
&lt;p&gt;I also performed benchmarking of NetBSD-9 amd64 native installation by
running 50 test-profiles on a remote machine assigned to me by mentors
and uploaded the benchmark results to
&lt;a href=&quot;https://openbenchmarking.org/&quot;&gt;OpenBenchmarking.org&lt;/a&gt; at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openbenchmarking.org/result/2008287-NE-3966268951&quot;&gt;https://openbenchmarking.org/result/2008287-NE-3966268951&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Test-profile debugging&lt;/h3&gt;
&lt;p&gt;I then continued the task of maintaining/porting test-profiles and
fixed the following test-profiles:&lt;/p&gt;
&lt;h4&gt;Timed FFmpeg Compilation&lt;/h4&gt;
&lt;p&gt;This test times how long it takes to build FFmpeg.
This test is part of &lt;code&gt;Processor Test&lt;/code&gt; category.&lt;/p&gt;
&lt;h5&gt;Original Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://openbenchmarking.org/test/pts/build-ffmpeg&quot;&gt;https://openbenchmarking.org/test/pts/build-ffmpeg&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Patched Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/build-ffmpeg-1.0.1&quot;&gt;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/build-ffmpeg-1.0.1&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;Commit:&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/commit/e9765185aabc01240cdb3671fb61f4c7d47e1b7e&quot;&gt;Replace the make -&amp;gt; gmake for compatibility with NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Compile Bench&lt;/h4&gt;
&lt;p&gt;Compilebench tries to age a filesystem by simulating some of the disk
IO common in creating, compiling, patching, stating and reading kernel
trees. It indirectly measures how well filesystems can maintain
directory locality as the disk fills up and directories age.
This test is part of &lt;code&gt;Disk Test&lt;/code&gt; category.&lt;/p&gt;
&lt;h5&gt;Original Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://openbenchmarking.org/test/pts/compilebench&quot;&gt;https://openbenchmarking.org/test/pts/compilebench&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Patched Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/compilebench-1.0.2&quot;&gt;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/compilebench-1.0.2&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;Commit:&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/commit/528b1853a07c22d79d2d8483b3fe2aa951d3866f&quot;&gt;Replaced python2 with NetBSD style naming python2.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Timed MAFFT Alignment&lt;/h4&gt;
&lt;p&gt;This test performs an alignment of 100 pyruvate decarboxylase sequences.
This test is part of &lt;code&gt;Processor Test&lt;/code&gt; category.&lt;/p&gt;
&lt;h5&gt;Original Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://openbenchmarking.org/test/pts/mafft&quot;&gt;https://openbenchmarking.org/test/pts/mafft&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Patched Test-profile:&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/mafft-1.5.0&quot;&gt;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/mafft-1.5.0&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;Commits:&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/commit/2bb288c4d352693b42586e55caf68a847d5740f8&quot;&gt;Replaced the make -&amp;gt; gmake for compatibility with NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-patches/commit/d31fee7256d165acfd22e23e04590ec322df3620&quot;&gt;Patch for replacing /bin/bash interpreter with /usr/pkg/bin/bash&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Future Plans&lt;/h2&gt;
&lt;p&gt;This officially summarizes my GSoC project: Benchmark NetBSD, and my
end goal of the project that is to integrate Phoronix Test Suite with
NetBSD and Anita for automated benchmarking is complete and its
deployment on benchmark.NetBSD.org will be continued to be worked on
with the coordination of moderators and merging the wip of Phoronix
Test Suite 9.8.0 will be done by the pkgsrc maintainers in next days.&lt;/p&gt;
&lt;p&gt;I want to thank my mentors and the NetBSD community without whose
constant support I wouldn&apos;t have achieved the goals.&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_second</id>
        <title type="html">GSoC Reports: Benchmarking NetBSD, second evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_second"/>
        <published>2020-08-12T10:09:16+00:00</published>
        <updated>2020-08-12T10:09:16+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="benchmarking" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code
2020.&lt;/p&gt;

&lt;p&gt;This blog post is in continuation of
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first&quot;&gt;GSoC Reports: Benchmarking NetBSD, first evaluation report&lt;/a&gt;
blog and describes my progress in the second phase of GSoC 2020 under
The NetBSD Foundation.&lt;/p&gt;

&lt;p&gt;In this phase, I worked on the automation of the regression suite made
using &lt;a href=&quot;https://www.phoronix-test-suite.com&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt;
and its integration with &lt;a href=&quot;https://www.gson.org/netbsd/anita&quot;&gt;Anita&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The automation framework consists of two components Phoromatic server,
provided by Phoronix Test Suite in pkgsrc, and Anita, a Python tool for
automating NetBSD installation.&lt;/p&gt;
</summary>
        <content type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code
2020.&lt;/p&gt;

&lt;p&gt;This blog post is in continuation of
&lt;a href=&quot;//blog.NetBSD.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first&quot;&gt;GSoC Reports: Benchmarking NetBSD, first evaluation report&lt;/a&gt;
blog and describes my progress in the second phase of GSoC 2020 under
The NetBSD Foundation.&lt;/p&gt;

&lt;p&gt;In this phase, I worked on the automation of the regression suite made
using &lt;a href=&quot;https://www.phoronix-test-suite.com&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt;
and its integration with &lt;a href=&quot;https://www.gson.org/netbsd/anita&quot;&gt;Anita&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The automation framework consists of two components Phoromatic server,
provided by Phoronix Test Suite in pkgsrc, and Anita, a Python tool for
automating NetBSD installation.&lt;/p&gt;

&lt;h2&gt;About Phoromatic&lt;/h2&gt;

&lt;p&gt;Phoromatic is a remote management system for the Phoronix Test Suite,
which allows the automatic scheduling of tests, remote installation of
new tests, and the management of multiple test systems through a web
interface. Tests can be scheduled to run on a routine basis across
multiple test systems automatically. Phoromatic can also interface with
revision control systems to offer support for issuing new tests on a
context-basis, such as whenever a Git commit has been pushed. The test
results are then available from the web interface.&lt;/p&gt;

&lt;h3&gt;Phoromatic client-server architecture&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_phoromatic-server-client-arch.png&quot; alt=&quot;Phoromatic server-client architecture&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Phoromatic server relies upon a PHP/HHVM built-in web server
process and a PTS-hosted WebSocket server. The web server process
handles the web UI and the responsibilities of the Phoromatic server.&lt;/p&gt;

&lt;p&gt;Phoromatic clients are testing machines installed with PTS that connect
to the Phoromatic web server through the HTTP port of the server.&lt;/p&gt;

&lt;h3&gt;Phoromatic Setup&lt;/h3&gt;

&lt;p&gt;To start the Phoromatic server, Phoromatic server HTTP port and web
server socket port needs to be set in
&lt;code&gt;~/.phoronix-test-suite/user-config.xml&lt;/code&gt; as shown:&lt;/p&gt;

&lt;pre&gt;
...
&amp;lt;Server&amp;gt;
      &amp;lt;RemoteAccessPort&amp;gt;8640&amp;lt;/RemoteAccessPort&amp;gt;
      &amp;lt;Password&amp;gt;&amp;lt;/Password&amp;gt;
      &amp;lt;WebSocketPort&amp;gt;8642&amp;lt;/WebSocketPort&amp;gt;
      &amp;lt;AdvertiseServiceZeroConf&amp;gt;TRUE&amp;lt;/AdvertiseServiceZeroConf&amp;gt;
      &amp;lt;AdvertiseServiceOpenBenchmarkRelay&amp;gt;TRUE&amp;lt;/AdvertiseServiceOpenBenchmarkRelay&amp;gt;
      &amp;lt;PhoromaticStorage&amp;gt;~/.phoronix-test-suite/phoromatic/&amp;lt;/PhoromaticStorage&amp;gt;
&amp;lt;/Server&amp;gt;
&lt;/pre&gt;

&lt;h3&gt;Phoromatic Usage&lt;/h3&gt;

&lt;p&gt;To start the Phoromatic web server for controlling local Phoronix Test Suite client systems:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ phoronix-test-suite start-phoromatic-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Phoromatic web server will be hosted at &lt;code&gt;localhost:8640&lt;/code&gt; and will require a local account creation on the server.&lt;/p&gt;

&lt;h4&gt;Phoromatic Clients&lt;/h4&gt;

&lt;p&gt;The Phoromatic client is used for connecting to a Phoromatic server to facilitate the automatic running of tests on that client.&lt;/p&gt;

&lt;p&gt;Phoromatic clients can be created and connected to the server using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
$ phoronix-test-suite phoromatic.connect SERVER_IP:SERVER_HTTP_PORT/ACCOUNT_ID
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Phoromatic server interacts with the Phoromatic clients through the HTTP port specified in the &lt;code&gt;~/.phoronix-test-suite/user-config.xml&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;Phoromatic Test-schedules&lt;/h4&gt;

&lt;p&gt;A test schedule is used to facilitate automatically running a set of
test(s)/suite(s) on either a routine timed basis or whenever triggered
by an external script or process, e.g. Git/VCS commit, manually
triggered, etc.
Phoromatic provides an option for pre-install, pre-run, post-install
and post-run shell scripts that are executed on the Phoromatic
clients.
Test-schedules can be configured to run any tests on any specific
systems.&lt;/p&gt;

&lt;h2&gt;About Anita&lt;/h2&gt;

&lt;p&gt;Anita is a tool for automated testing of the NetBSD operating system.
Using Anita, we can download a NetBSD distribution and install it in a
virtual machine in a fully automated fashion. Anita is written in
Python and uses the pexpect module to &amp;ldquo;screen scrape&amp;rdquo; the sysinst
output over an emulated serial console and script the installation
procedure.&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;Anita can be installed on NetBSD, Linux and macOS systems using the following:&lt;/p&gt;

&lt;pre&gt;
$ pip install pexpect
$ git clone https://github.com/gson1703/anita/
$ python setup.py install
&lt;/pre&gt;

&lt;h2&gt;Phoromatic-Anita Integration&lt;/h2&gt;

&lt;p&gt;I would like to describe the workflow here briefly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A test-schedule was created on the Phoromatic server meant to run
&lt;code&gt;pts/idle-1.2.0&lt;/code&gt; test on the host machine that contains the
&lt;a href=&quot;https://gist.github.com/apurvanandan1997/48b54402db1df3723920735f85fc7934&quot;&gt;phoromatic-anita-integration.sh&lt;/a&gt;
as a pre-run script.&lt;/li&gt;
&lt;li&gt;The script performs the following:

&lt;ul&gt;
&lt;li&gt;Creates a mountable disk image with an executable script for
setting up Phoronix Test Suite and Phoromatic client creation on the
benchmarking VM systems.&lt;/li&gt;
&lt;li&gt;Invokes Anita with the appropriate command-line options for
configurations and network setup and mounts the image to run the
configuration script on the VM.&lt;/li&gt;
&lt;li&gt;Configuration script performs hostname change, DHCP setup, NFS
setup, &lt;code&gt;PKG_PATH&lt;/code&gt; setup, PTS installation, its configuration and
connecting it to the Phoromatic server through a network bridge.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Once the benchmarking VM systems get connected to the Phoromatic
server, Phoromatic server identifies the benchmarking VM systems with
their IP address, hostname and MAC address.&lt;/li&gt;
&lt;li&gt;After the identification, Phoromatic initiates the pending tests on
VM (test-profiles are downloaded on the go in the VM and executed) and
maintains a history of the test result data.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Few points to be noted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have used a local PKG_PATH with a NFS server setup as PTS 9.6.1 is
available in wip and recompiling it would be a wastage of time. Later I
have planned to use the binary shard by Joyent:
&lt;a href=&quot;https://pkgsrc.joyent.com/packages/NetBSD/9.99.69/amd64/All/&quot;&gt;https://pkgsrc.joyent.com/packages/NetBSD/9.99.69/amd64/All/&lt;/a&gt; once the
updated PTS gets upstreamed.&lt;/li&gt;
&lt;li&gt;The host machine needs some one-time manual setup like installation
of QEMU, Anita, pexpect, term, cvs, etc., initial user registration on
Phoromatic server, Phoromatic port setup, network bridge setup. Apart
from this, the rest of the framework does not require user
supervision.&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;VM configuration script&lt;/h5&gt;

&lt;p&gt;The following script is used as a pre-run script in the test-schedules for invoking Anita and setting up the VMs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/apurvanandan1997/48b54402db1df3723920735f85fc7934&quot;&gt;https://gist.github.com/apurvanandan1997/48b54402db1df3723920735f85fc7934&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;Networking Setup&lt;/h5&gt;

&lt;p&gt;A bridged networking mode configuration of QEMU has been used in Anita
as multiple VMs will be able to accommodate with a single bridge
(created on the host machine, one-time setup) using
&lt;a href=&quot;//man.NetBSD.org/dhcpcd.8&quot;&gt;dhcpcd(8)&lt;/a&gt;,
without complicated host forwarding setup (Phoromatic server requires
HTTP port forwarding).&lt;/p&gt;

&lt;p&gt;In order to enable bridged networking for your QEMU guests, you must
first create and configure a bridge interface on your host.&lt;/p&gt;

&lt;pre&gt;
# ifconfig virbr0 create
&lt;/pre&gt;

&lt;p&gt;Next, you must specify the newly-created bridge interface in
&lt;code&gt;/etc/qemu/bridge.conf&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;
$ sudo mkdir /etc/qemu
$ sudo touch /etc/qemu/bridge.conf &amp;amp;&amp;amp; sudo chmod 644 /etc/qemu/bridge.conf
$ sudo sh -c &quot;echo &apos;allow virbr0&apos; &gt;&gt; /etc/qemu/bridge.conf&quot;
&lt;/pre&gt;

&lt;p&gt;Finally, in order for non-privileged processes to be able to invoke
qemu-bridge-helper, you must set the setuid bit on the utility:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
$ sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For more details on the bridged mode networking setup in QEMU, please
refer to the following guides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://t.pagef.lt/basic-networking-with-qemu/&quot;&gt;https://t.pagef.lt/basic-networking-with-qemu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.NetBSD.org/docs/guide/en/chap-net-practice.html#chap-net-practice-bridge&quot;&gt;https://www.NetBSD.org/docs/guide/en/chap-net-practice.html#chap-net-practice-bridge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;Reproducing the framework&lt;/h5&gt;

&lt;p&gt;To reproduce the framework, you need to have Phoronix Test Suite, QEMU,
Anita, pexpect, cvs, xterm, makefs installed on your host machine.&lt;/p&gt;

&lt;p&gt;For example on NetBSD:&lt;/p&gt;

&lt;pre&gt;
# pkg_add qemu
# pkg_add py37-anita
$ cd pkgsrc/wip/phoronix-test-suite
$ make install
&lt;/pre&gt;

&lt;p&gt;The step-by-step process to get the framework after installing PTS,
including the one-time manual setup, can be summarized as follows:  All
control and configuration of the Phoromatic Server is done via the
web-based interface when the Phoromatic Server is active.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure the port of Phoromatic server as 8640 and web socket as
8642 as described above.&lt;/li&gt;
&lt;li&gt;Start the Phoromatic server using the command stated above.
&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_phoromatic-register.png&quot; alt=&quot;Phoromatic login page image&quot; width=&quot;800&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Create your user account on the Phoromatic server using the web interface GUI.
&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_phoromatic.png&quot; alt=&quot;Phoromatic default page image&quot; width=&quot;800&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Disable client system approval for new system addition from the
settings menu in the web interface.&lt;/li&gt;
&lt;li&gt;Connect the host machine as a Phoromatic client to the Phoromatic
server using the command stated above.&lt;/li&gt;
&lt;li&gt;Create a test-schedule for the host machine with the
&lt;a href=&quot;https://gist.github.com/apurvanandan1997/48b54402db1df3723920735f85fc7934&quot;&gt;pre-run script&lt;/a&gt;
as specified above and &lt;code&gt;pts/idle-1.2.0&lt;/code&gt; as the test-profile.
&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_create-sch.png&quot; alt=&quot;Phoromatic create test-schedule image&quot; width=&quot;800&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Execute the test-schedule or assign it on a timed-schedule and watch it running!
&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_host-machine-test-sch.png&quot; alt=&quot;Phoromatic Anita integration test-scehdule&quot; width=&quot;800&quot; /&gt;&lt;/li&gt;
&lt;li&gt;New VM systems with the latest NetBSD-current binaries and packages
will be created and identified by Phoromatic server automatically.&lt;/li&gt;
&lt;li&gt;Once for all, we need to specify what benchmarking test-profiles need
to be run on the VM systems in the test-schedules section and it will
be taken care of by Phoromatic.
&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_test-sch.png&quot; alt=&quot;Phoromatic benchmarking system test-schedule image&quot; width=&quot;800&quot; /&gt;&lt;/li&gt;
&lt;li&gt;The result history can also be viewed from Phoromatic web interface.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;You can have a look at the video to get a clearer picture of how to
setup the framework:&lt;/p&gt;

&lt;iframe width=&quot;800&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/7OSaqDWIsxo&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;h2&gt;Future Plans&lt;/h2&gt;

&lt;p&gt;The regression suite is complete and final tasks of deploying it on
benchmark.NetBSD.org and upstreaming the wip of Phoronix Test Suite
will be done in the final phase of my GSoC project.
I want to thank my mentors for their constant support.&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first</id>
        <title type="html">GSoC Reports: Benchmarking NetBSD, first evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/gsoc_reports_benchmarking_netbsd_first"/>
        <published>2020-07-16T09:38:58+00:00</published>
        <updated>2020-07-17T16:00:11+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="benchmarking" scheme="http://roller.apache.org/ns/tags/" />
        <category term="pkgsrc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code 2020.&lt;/p&gt;

&lt;p&gt;My GSoC project under NetBSD involves developing an automated
regression and performance test framework for NetBSD that offers
reproducible benchmarking results with detailed history and logs across
various hardware &amp;amp; architectures.&lt;/p&gt;

&lt;p&gt;To achieve this performance testing framework, I am using the
&lt;a href=&quot;https://www.phoronix-test-suite.com/&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt;
which is an open-source, cross-platform automated testing/benchmarking
software for Linux, Windows and BSD environments. It allows the
creation of new tests using simple XML files and shell scripts and
integrates with revision control systems for per-commit regression
testing.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;This report was written by Apurva Nandan as part of Google Summer of Code 2020.&lt;/p&gt;

&lt;p&gt;My GSoC project under NetBSD involves developing an automated
regression and performance test framework for NetBSD that offers
reproducible benchmarking results with detailed history and logs across
various hardware &amp;amp; architectures.&lt;/p&gt;

&lt;p&gt;To achieve this performance testing framework, I am using the
&lt;a href=&quot;https://www.phoronix-test-suite.com/&quot;&gt;Phoronix Test Suite (PTS)&lt;/a&gt;
which is an open-source, cross-platform automated testing/benchmarking
software for Linux, Windows and BSD environments. It allows the
creation of new tests using simple XML files and shell scripts and
integrates with revision control systems for per-commit regression
testing.&lt;/p&gt;

&lt;h2&gt;About PTS&lt;/h2&gt;

&lt;h3&gt;PTS core&lt;/h3&gt;

&lt;p&gt;PTS core is the engine of the Phoronix Test Suite and handles the following jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly updating the test profiles, test suites, and repository index.&lt;/li&gt;
&lt;li&gt;Downloading, compilation, installation and evaluation of test packages.&lt;/li&gt;
&lt;li&gt;Test result management and uploading results and user-defined
test-profiles/suites to OpenBenchmarking.org&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Test-profiles/Suites &amp;amp; OpenBenchmarking&lt;/h3&gt;

&lt;p&gt;Test-profiles are light-weight XMLs and shell scripts that allow easy
installation of the benchmarking packages and their evaluation.
Test-profiles generally contains the following files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;downloads.xml&lt;/code&gt;: Stores the links of the benchmarking packages,
required additional packages, patches to be applied, etc. with their
hash sums.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;install.sh&lt;/code&gt;: Actual compilation, installation, and test
evaluation shell script. Also handles the task of applying patches.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results-definition.xml&lt;/code&gt;: Meta-data to define the information for
test result data (e.g. result data units, LIB or HIB, etc.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test-definition.xml&lt;/code&gt;: Meta-data to specify test-profile details,
such as compatible OS, external dependencies, test arguments, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;A simple test-profile
&lt;a href=&quot;https://openbenchmarking.org/innhold/91db3ffff901d12dabd732bc568a44d02e5c6387&quot;&gt;C-Ray-1.2.0&lt;/a&gt;
can be seen to get an idea of the XMLs and shell scripts.&lt;/p&gt;

&lt;p&gt;Test-suites are bundles of related test-profiles or more suites,
focusing on a subsystem or certain category of tests e.g. Disk Test
Suite, Kernel, CPU suite, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://openbenchmarking.org/&quot;&gt;OpenBenchmarking.org&lt;/a&gt; serves as a
repository for storing test profiles, test suites, hence allowing
new/updated tests to be seamlessly obtained via PTS.
OpenBenchmarking.org also provides a platform to store the test result
data openly and do a comparison between any test results stored in the
OpenBenchmarking.org cloud.&lt;/p&gt;

&lt;h2&gt;Usage&lt;/h2&gt;

&lt;h3&gt;Test installation&lt;/h3&gt;

&lt;p&gt;The command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ phoronix-test-suite install test-profile-name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Fetches the sources of the tests related to the the test-profile in
&lt;code&gt;~/.phoronix-test-suite/installed-tests&lt;/code&gt;, applies patches and
carries out compilation of test sources for generating the executables
to run the tests.&lt;/p&gt;

&lt;h3&gt;Test execution&lt;/h3&gt;

&lt;p&gt;The command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ phoronix-test-suite run test-profile-name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Performs installation of the test (similar to &lt;code&gt;$ phoronix-test-suite
install test-profile-name&lt;/code&gt;) followed by exectution the binary from
the compiled sources of the test in
&lt;code&gt;~/.phoronix-test-suite/installed-tests&lt;/code&gt; and finally reports the
tests results/outcome to the user and provides an option to upload
results to OpenBenchmarking.org.&lt;/p&gt;

&lt;h2&gt;Progress in the first phase of GSoC&lt;/h2&gt;

&lt;h3&gt;pkgsrc-wip&lt;/h3&gt;

&lt;p&gt;The first task performed by me was upgrading the Phoronix Test Suite
from version 8.8 to the latest stable version 9.6.1 in &lt;code&gt;pkgsrc-wip&lt;/code&gt;
and is available as
&lt;a href=&quot;https://pkgsrc.se/wip/phoronix-test-suite&quot;&gt;wip/phoronix-test-suite&lt;/a&gt;.
You can have a look at the
&lt;a href=&quot;https://github.com/phoronix-test-suite/phoronix-test-suite/blob/master/ChangeLog&quot;&gt;PTS Changelog&lt;/a&gt;
to know about the improvements between these two versions.&lt;/p&gt;

&lt;h4&gt;Major Commits:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NetBSD/pkgsrc-wip/commit/0073e18af14a97e33542a15d5a2940ed0b353897&quot;&gt;wip/phoronix-test-suite: update phoronix-test-suite to 9.6.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NetBSD/pkgsrc-wip/commit/959a9a0821fb155d11a2a68d2271233135375df1&quot;&gt;Added required PHP dependencies &amp;amp; removed TODO file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Currently, the PTS upgrade to 9.6.1 is subject to more modifications
and fixes before it gets finally merged to the &lt;code&gt;pkgsrc&lt;/code&gt; upstream.
To test the Phoronix Test Suite 9.6.1 on NetBSD till then, you can
setup &lt;code&gt;pkgsrc-wip&lt;/code&gt; on your system via:&lt;/p&gt;

&lt;pre&gt;
$ cd /usr/pkgsrc
$ git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip
&lt;/pre&gt;

&lt;p&gt;To learn more about pkgsrc-wip please see
&lt;a href=&quot;https://pkgsrc.org/wip/&quot;&gt;The pkgsrc-wip project homepage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After setting up &lt;code&gt;pkgsrc-wip&lt;/code&gt;, use the following command for
installation of PTS 9.6.1:&lt;/p&gt;

&lt;pre&gt;
$ cd /usr/pkgsrc/wip/phoronix-test-suite
$ make install
&lt;/pre&gt;

&lt;p&gt;If any new build/installation errors are encountered, please document
them in wip/phoronix-test-suite/TODO file and/or contact me.&lt;/p&gt;

&lt;h3&gt;Testing &amp;amp; Debugging&lt;/h3&gt;

&lt;p&gt;As we now know, having a look over OpenBenchmarking.org&amp;rsquo;s available
test-profiles section or using
&lt;code&gt;$ phoronix-test-suite list-available-tests&lt;/code&gt;,
there are 309 test-profiles available on PTS for Linux, and only 166 of
309 tests have been ported to NetBSD (can be differentiated by a
thunder symbol on the test profile on the website).  These 166
test-profiles can be fetch, build and executed on NetBSD using just a
single command &lt;code&gt;$ phoronix-test-suite run test-profile-name&lt;/code&gt;. I am
ignoring the graphics ones in both Linux &amp;amp; NetBSD as GPU benchmarking
wasn&amp;rsquo;t required in the project.&lt;/p&gt;

&lt;p&gt;Many of the test profiles available on NetBSD have installation, build,
or runtime errors i.e. they don&amp;rsquo;t work out of the box using the command
&lt;code&gt;$ phoronix-test-suite run test-profile-name&lt;/code&gt;. I ran 90 of these
test profiles on a NetBSD-current x86_64 QEMU VM (took a lot of time
due to the heavy tests) and have reported the status in the sheet:
&lt;a href=&quot;https://drive.google.com/file/d/1gW76JI7W-Jpeczns49k1bBIVr8bb6QuX/view?usp=sharing&quot;&gt;NetBSD GSoC: Test Porting Progress Report&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can have a look at how a PTS test-profile under action looks like!&lt;/p&gt;

&lt;h4&gt;Aircrack-NG test-profile demonstration&lt;/h4&gt;

&lt;p&gt;Aircrack-ng is a tool for assessing WiFi/WLAN network security.&lt;/p&gt;

&lt;p&gt;The PTS test-profile is available at:
&lt;a href=&quot;https://openbenchmarking.org/test/pts/aircrack-ng&quot;&gt;https://openbenchmarking.org/test/pts/aircrack-ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_aircrack_ng_test.png&quot; alt=&quot;Screenshot of aircrack-ng PTS test-profile results&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For further information, complete results can be seen at
&lt;a href=&quot;https://openbenchmarking.org/result/2007116-NI-AIRCRACKN51&quot;&gt;https://openbenchmarking.org/result/2007116-NI-AIRCRACKN51&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;AOBench test-profile demonstration&lt;/h4&gt;

&lt;p&gt;AOBench is a lightweight ambient occlusion renderer, written in C.&lt;/p&gt;

&lt;p&gt;The PTS test-profile is available at:
&lt;a href=&quot;https://openbenchmarking.org/test/pts/aircrack-ng&quot;&gt;https://openbenchmarking.org/test/pts/aircrack-ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_aobench_test.png&quot; alt=&quot;Screenshot of aobench PTS test-profile results&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For further information, complete results can be seen at:
&lt;a href=&quot;https://openbenchmarking.org/result/2007148-NI-AOBENCHTE94&quot;&gt;https://openbenchmarking.org/result/2007148-NI-AOBENCHTE94&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Debugging and fixing non-working test-profiles&lt;/h4&gt;

&lt;p&gt;After testing these test-profiles, I debugged the following build
errors in the following test-profiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pts/t-test1-1.0.1: &lt;code&gt;memalign()&lt;/code&gt; not available on NetBSD&lt;/li&gt;
&lt;li&gt;pts/coremark-1.0.0: calling bmake instead of gmake&lt;/li&gt;
&lt;li&gt;pts/apache-siege-1.0.4: Missing &lt;code&gt;signal.h&lt;/code&gt; header&lt;/li&gt;
&lt;li&gt;pts/mbw-1.0.0: &lt;code&gt;mempcpy()&lt;/code&gt; not available on NetBSD&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Fixes to the above bugs can be found in the sheet or in the GitHub
repositories shared in the next paragraph.&lt;/p&gt;

&lt;p&gt;The modified test-profiles have been pushed to
&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev&quot;&gt;pts-test-profiles-dev&lt;/a&gt;
and the fix patches to
&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-patches&quot;&gt;pts-test-profiles-patches&lt;/a&gt;.
These patches are automatically downloaded by the debugged
test-profiles and automatically applied before building of tests.  The
steps to install the debugged test-profiles have been added in the
&lt;code&gt;README.md&lt;/code&gt; of
&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev&quot;&gt;pts-test-profiles-dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These patches have been added in the &lt;code&gt;downloads.xml&lt;/code&gt; of the
modified test-profiles, and hence they get fetched during the test
installation. The &lt;code&gt;install.sh&lt;/code&gt; script in these modified
test-profiles applies them on the benchmarking packages if the
operating system is detected as NetBSD, thereby removing the build
errors.&lt;/p&gt;

&lt;h4&gt;coremark test-profile demonstration&lt;/h4&gt;

&lt;p&gt;You can have a look at the patched coremark-1.0.0 test-profile under
execution:&lt;/p&gt;

&lt;p&gt;The patched PTS test-profile is available at:
&lt;a href=&quot;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/coremark-1.0.0&quot;&gt;https://github.com/apurvanandan1997/pts-test-profiles-dev/tree/master/coremark-1.0.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a test of EEMBC CoreMark processor benchmark.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/pts_coremark_test.png&quot; alt=&quot;Screenshot of patched coremark PTS test-profile results&quot; width=&quot;800&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For further information, complete results can be seen at:
&lt;a href=&quot;https://openbenchmarking.org/result/2007148-NI-LOCALCORE64&quot;&gt;https://openbenchmarking.org/result/2007148-NI-LOCALCORE64&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Porting more test-profiles to NetBSD&lt;/h4&gt;

&lt;p&gt;Attempts were made to port new test-profiles from Linux to NetBSD, but
the major incompatibility issue was missing external dependencies in
NetBSD. Hence, this may reduce the number of test-profiles we can
actually port, but more sincere efforts will be made in this direction
in the next phase.&lt;/p&gt;

&lt;h2&gt;Future Plans&lt;/h2&gt;

&lt;p&gt;My next steps would involve porting the non-available tests to NetBSD
i.e. the non-graphics ones available on Linux but unavailable on
NetBSD, and fix the remaining test-profiles for NetBSD.&lt;/p&gt;

&lt;p&gt;After gaining an availability of a decent number of test-profiles on
NetBSD, I will use Phoromatic, a remote tests management system for the
PTS (allows the automatic scheduling of tests, remote installation of
new tests, and the management of multiple test systems) to host the
live results of the automated benchmarking framework on
benchmark.NetBSD.org, thereby delivering a functional performance and
regression testing framework.&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code2</id>
        <title type="html">Announcing Google Summer of Code 2020 projects</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code2"/>
        <published>2020-05-07T10:16:58+00:00</published>
        <updated>2020-05-07T10:18:46+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;//www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&apos; style=&quot;width: 80px; height: 80px; float: right;&quot; /&gt;&lt;/a&gt;
We are very happy to announce
&lt;a href=&apos;https://summerofcode.withgoogle.com/organizations/5125029991284736/&apos;&gt;
The NetBSD Foundation Google Summer of Code 2020 projects&lt;/a&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apurva Nandan - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#4645452886048768&apos;&gt;Benchmark NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jain Naman - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#4884895517638656&apos;&gt;Curses library automated testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nikita Gillmann - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5101731152658432&apos;&gt;Make system(3) and popen(3) use posix_spawn(3) internally&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ayushi Sharma - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6134980024991744&apos;&gt;Enhance the syzkaller support for NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Aditya Vardhan Padala - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6449059977494528&apos;&gt;Rumpkernel Syscall Fuzzing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nisarg Joshi - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6486401496907776&apos;&gt;Fuzzing the network stack of NetBSD in a rumpkernel environment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jason High - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6728937511583744&apos;&gt;Extending the functionality of the netpgp suite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The community bonding period - where students get in touch with mentors and
community - started on May 4 and will go on until June 1.
The coding period will be June 1 to August 24.
&lt;/p&gt;

&lt;p&gt;
Please welcome all our students and a big good luck to students and mentors!
&lt;/p&gt;

&lt;p&gt;
A big thank you to &lt;a href=&apos;https://www.google.com/&apos;&gt;Google&lt;/a&gt; and The
NetBSD Foundation organization mentors and administrators!
&lt;/p&gt;

&lt;p&gt;
Looking forward to having another nice Google Summer of Code!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on1</id>
        <title type="html">Porting wine to amd64 on NetBSD, third evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on1"/>
        <published>2019-08-21T19:11:41+00:00</published>
        <updated>2019-08-26T12:34:54+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc2019" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wine" scheme="http://roller.apache.org/ns/tags/" />
        <category term="amd64" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;
&lt;p&gt;
    This report encompasses the progress of the project during the
    third coding period.
    You can make sense of the overall progress of
    the project by going through
    the &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/porting_wine_to_amd64_on&quot;&gt;first
    evaluation report&lt;/a&gt;
    and &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/porting_wine_to_amd64_on2&quot;&gt;second
    evaluation report&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Wine-4.4 (released on Mar 2019) is working fine on amd64
    and i386.  I have been able to use a script as a workaround for
    the problem of setting &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;. My patch for
    setting guard size to 0 and hence, precluding Wine from
    segfaulting, that got upstreamed, can be
    found &lt;a href=&quot;https://source.winehq.org/git/wine.git/commit/de5392bfe7919c180d6650eec7b57b5386a4796f&quot;&gt;here&lt;/a&gt;.
    I have updated the package to the latest development version of
    Wine which is Wine-4.13 (released on Aug 2019).  I have
    added support to Wine pkgsrc packages to run tests using make
    test, and at the time of writing, they are failing. I have also
    noticed them fail on Linux non-pkgsrc environment and hence, will
    require further investigation.  Initially, they were disabled
    owing to pkgsrc setting &lt;code&gt;FORTIFY_SOURCE&lt;/code&gt; which is a macro that
    provides support for detecting buffer overflows.  In pkgsrc, the
    &lt;code&gt;wip/wine*&lt;/code&gt; packages honor &lt;code&gt;PKGSRC_USE_FORTIFY&lt;/code&gt; variable passing
    &lt;code&gt;_FORTIFY_SOURCE&lt;/code&gt; macro accordingly.  Programs compiled with
    &lt;code&gt;FORTIFY_SOURCE&lt;/code&gt; substitute wrappers for commonly used libc
    functions that don&apos;t do bounds checking regularly, but could in some
    cases.  Wine unconditionally disables that via their configure
    script because for some platforms that triggered false positives
    in the past.  However, in my experience, no false positive were
    found.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;
&lt;p&gt;
    This report encompasses the progress of the project during the
    third coding period.
    You can make sense of the overall progress of
    the project by going through
    the &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/porting_wine_to_amd64_on&quot;&gt;first
    evaluation report&lt;/a&gt;
    and &lt;a href=&quot;//blog.NetBSD.org/tnf/entry/porting_wine_to_amd64_on2&quot;&gt;second
    evaluation report&lt;/a&gt;.
&lt;/p&gt;
&lt;h2&gt;WINE on amd64&lt;/h2&gt;
&lt;p&gt;
    Wine-4.4 (released on Mar 2019) is working fine on amd64
    and i386.  I have been able to use a script as a workaround for
    the problem of setting &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;. My patch for
    setting guard size to 0 and hence, precluding Wine from
    segfaulting, that got upstreamed, can be
    found &lt;a href=&quot;https://source.winehq.org/git/wine.git/commit/de5392bfe7919c180d6650eec7b57b5386a4796f&quot;&gt;here&lt;/a&gt;.
    I have updated the package to the latest development version of
    Wine which is Wine-4.13 (released on Aug 2019).  I have
    added support to Wine pkgsrc packages to run tests using make
    test, and at the time of writing, they are failing. I have also
    noticed them fail on Linux non-pkgsrc environment and hence, will
    require further investigation.  Initially, they were disabled
    owing to pkgsrc setting &lt;code&gt;FORTIFY_SOURCE&lt;/code&gt; which is a macro that
    provides support for detecting buffer overflows.  In pkgsrc, the
    &lt;code&gt;wip/wine*&lt;/code&gt; packages honor &lt;code&gt;PKGSRC_USE_FORTIFY&lt;/code&gt; variable passing
    &lt;code&gt;_FORTIFY_SOURCE&lt;/code&gt; macro accordingly.  Programs compiled with
    &lt;code&gt;FORTIFY_SOURCE&lt;/code&gt; substitute wrappers for commonly used libc
    functions that don&apos;t do bounds checking regularly, but could in some
    cases.  Wine unconditionally disables that via their configure
    script because for some platforms that triggered false positives
    in the past.  However, in my experience, no false positive were
    found.
&lt;/p&gt;
&lt;p&gt;  
    Running tests on Wine-4.13 throws errors as you can see below:
&lt;pre&gt;
mode64# make test
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M adsldp.dll -p adsldp_test.exe.so sysinfo &amp;&amp; touch sysinfo.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
002a:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth &gt;= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
002a:fixme:advapi:LsaOpenPolicy ((null),0x22f150,0x00000001,0x22f120) stub
002a:fixme:security:GetWindowsAccountDomainSid (000000000022EEA0 000000000002B028 000000000022EE9C): semi-stub
002a:fixme:advapi:LsaClose (0xcafe) stub
002a:fixme:advapi:LsaOpenPolicy ((null),0x22f0e0,0x00000001,0x22f0b0) stub
002a:fixme:security:GetWindowsAccountDomainSid (000000000022EE30 000000000002B318 000000000022EE2C): semi-stub
002a:fixme:advapi:LsaClose (0xcafe) stub
002a:fixme:advapi:LsaOpenPolicy ((null),0x22f0e0,0x00000001,0x22f0b0) stub
002a:fixme:security:GetWindowsAccountDomainSid (000000000022EE30 000000000002B318 000000000022EE2C): semi-stub
002a:fixme:advapi:LsaClose (0xcafe) stub
002a:fixme:adsldp:sysinfo_get_UserName 0000000000021670,000000000022F0C8: stub
002a:fixme:advapi:LsaOpenPolicy ((null),0x22f980,0x00000001,0x22f950) stub
002a:fixme:security:GetWindowsAccountDomainSid (000000000022F6D0 000000000002B318 000000000022F6CC): semi-stub
002a:fixme:advapi:LsaClose (0xcafe) stub
002a:fixme:advapi:LsaOpenPolicy ((null),0x22f980,0x00000001,0x22f950) stub
002a:fixme:security:GetWindowsAccountDomainSid (000000000022F6D0 000000000002B318 000000000022F6CC): semi-stub
002a:fixme:advapi:LsaClose (0xcafe) stub
002a:fixme:adsldp:sysinfo_get_UserName 0000000000021670,000000000022FB48: stub
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so cred &amp;&amp; touch cred.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
002e:fixme:cred:CredReadW unhandled type -1
002e:fixme:cred:CredReadW unhandled flags 0xdeadbeef
002e:err:cred:CredWriteW bad username L&quot;winetest&quot;
002e:err:cred:CredWriteW bad username (null)
002e:err:cred:CredWriteW bad username (null)
002e:fixme:cred:CredDeleteW unhandled type -1
002e:fixme:cred:CredDeleteW unhandled flags 0xdeadbeef
002e:fixme:cred:CredReadDomainCredentialsW (0x1b1d0, 0x0, 0x22fa50, 0x22f908) stub
002e:fixme:cred:CredReadDomainCredentialsW (0x1b1d0, 0x0, 0x22fa50, 0x22f908) stub
002e:fixme:cred:CredReadDomainCredentialsW (0x1b3c0, 0x0, 0x22fa50, 0x22f908) stub
cred.c:820: Tests skipped: CRED_TYPE_DOMAIN_VISIBLE_PASSWORD credentials are not supported or are disabled. Skipping
002e:fixme:cred:CredIsMarshaledCredentialW BinaryBlobCredential not checked
002e:fixme:cred:CredIsMarshaledCredentialW BinaryBlobCredential not checked
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so crypt &amp;&amp; touch crypt.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so crypt_lmhash &amp;&amp; touch crypt_lmhash.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so crypt_md4 &amp;&amp; touch crypt_md4.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so crypt_md5 &amp;&amp; touch crypt_md5.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so crypt_sha &amp;&amp; touch crypt_sha.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so eventlog &amp;&amp; touch eventlog.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:OpenEventLogW ((null),(null)) stub
0046:fixme:advapi:OpenEventLogW (L&quot;IDontExist&quot;,(null)) stub
0046:fixme:advapi:OpenEventLogW (L&quot;IDontExist&quot;,L&quot;deadbeef&quot;) stub
0046:fixme:advapi:OpenEventLogW Remote server not supported
0046:fixme:advapi:OpenEventLogW ((null),L&quot;deadbeef&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW (L&quot;&quot;,L&quot;Application&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:GetEventLogInformation (0x0, 1, 0x0, 0, 0x0) stub
0046:fixme:advapi:GetEventLogInformation (0x0, 0, 0x0, 0, 0x0) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:GetEventLogInformation (0xcafe4242, 0, 0x0, 0, 0x0) stub
0046:fixme:advapi:GetEventLogInformation (0xcafe4242, 0, 0x0, 0, 0x22fb40) stub
0046:fixme:advapi:GetEventLogInformation (0xcafe4242, 0, 0x22fb59, 0, 0x0) stub
0046:fixme:advapi:GetEventLogInformation (0xcafe4242, 0, 0x22fb59, 0, 0x22fb40) stub
0046:fixme:advapi:GetEventLogInformation (0xcafe4242, 0, 0x22fb59, 8, 0x22fb40) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0x0,0x0) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0x0,0x22fb40) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x0) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fb40) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),L&quot;backup.evt&quot;) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0x0,0x22fb40) stub
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:GetOldestEventLogRecord (0x0,0x0) stub
0046:fixme:advapi:GetOldestEventLogRecord (0x0,0x22fb40) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x0) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fb40) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),L&quot;backup.evt&quot;) stub
0046:fixme:advapi:GetOldestEventLogRecord (0x0,0x22fb40) stub
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:BackupEventLogW (0x0,(null)) stub
0046:fixme:advapi:BackupEventLogW (0x0,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,(null)) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),L&quot;backup.evt&quot;) stub
0046:fixme:advapi:BackupEventLogW (0x0,L&quot;backup2.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),(null)) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),L&quot;idontexist.evt&quot;) stub
0046:fixme:advapi:OpenBackupEventLogW (L&quot;IDontExist&quot;,(null)) stub
0046:fixme:advapi:OpenBackupEventLogW (L&quot;IDontExist&quot;,L&quot;idontexist.evt&quot;) stub
0046:fixme:advapi:OpenBackupEventLogW Remote server not supported
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
eventlog.c:546: Tests skipped: We don&apos;t have a backup eventlog to work with
0046:fixme:advapi:ReadEventLogA (0x0,0x00000000,0x00000000,0x0,0x00000000,0x0,0x0) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000000,0x00000000,0x0,0x00000000,0x22fa88,0x0) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000000,0x00000000,0x0,0x00000000,0x0,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000000,0x00000000,0x0,0x00000000,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000005,0x00000000,0x0,0x00000000,0x0,0x0) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000005,0x00000000,0x0,0x00000000,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000005,0x00000000,0x0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0x0,0x00000005,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x00000000,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x00000001,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x00000002,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x0000000d,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x0000000e,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x00000007,0x00000000,0x1b3d0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa84) stub
eventlog.c:479: Tests skipped: No records in the &apos;Application&apos; log
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:ClearEventLogW (0x0,(null)) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Application&quot;) stub
0046:fixme:advapi:BackupEventLogW (0xcafe4242,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:ClearEventLogW (0x0,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:OpenBackupEventLogW ((null),L&quot;backup.evt&quot;) stub
0046:fixme:advapi:ClearEventLogW (0x0,L&quot;backup.evt&quot;) stub
0046:fixme:advapi:ClearEventLogW (0x0,L&quot;backup2.evt&quot;) stub
0046:fixme:advapi:ClearEventLogW (0x0,(null)) stub
0046:fixme:advapi:CloseEventLog (0x0) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Wine&quot;) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0020,0x0000,0x00000000,0x0,0x0000,0x00000000,0x0,0x0): stub
0046:fixme:advapi:ReadEventLogA (0xcafe4242,0x00000005,0x00000000,0x1b1e0,0x00000038,0x22fa88,0x22fa8c) stub
0046:fixme:advapi:ClearEventLogW (0xcafe4242,(null)) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:RegisterEventSourceA ((null),&quot;Wine&quot;): stub
0046:fixme:advapi:RegisterEventSourceW (L&quot;&quot;,L&quot;Wine&quot;): stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0004,0x0001,0x00000001,0x0,0x0001,0x00000000,0x7f7ff72beb00,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0004,0x0001,0x00000001,0x0,0x0001,0x00000000,0x1b1e0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;WineSrc&quot;) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0002,0x0001,0x00000002,0x0,0x0000,0x00000000,0x0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:RegisterEventSourceA ((null),&quot;WineSrc1&quot;): stub
0046:fixme:advapi:RegisterEventSourceW (L&quot;&quot;,L&quot;WineSrc1&quot;): stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0010,0x0001,0x00000003,0x0,0x0002,0x00000000,0x7f7ff72beaf0,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0010,0x0001,0x00000003,0x0,0x0002,0x00000000,0x1b1e0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;WineSrc20&quot;) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0001,0x0001,0x00000004,0x0,0x0000,0x00000000,0x0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:RegisterEventSourceA ((null),&quot;WineSrc300&quot;): stub
0046:fixme:advapi:RegisterEventSourceW (L&quot;&quot;,L&quot;WineSrc300&quot;): stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0002,0x0001,0x00000005,0x0,0x0001,0x00000000,0x7f7ff72beb00,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0002,0x0001,0x00000005,0x0,0x0001,0x00000000,0x1b1e0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Wine&quot;) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0000,0x0002,0x00000006,0x1b3d0,0x0002,0x00000000,0x7f7ff72beaf0,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0000,0x0002,0x00000006,0x1b3d0,0x0002,0x00000000,0x1b1e0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:RegisterEventSourceA ((null),&quot;WineSrc&quot;): stub
0046:fixme:advapi:RegisterEventSourceW (L&quot;&quot;,L&quot;WineSrc&quot;): stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0010,0x0002,0x00000007,0x1b3d0,0x0000,0x00000000,0x0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;WineSrc1&quot;) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0008,0x0002,0x00000008,0x1b3d0,0x0002,0x00000000,0x7f7ff72beaf0,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0008,0x0002,0x00000008,0x1b3d0,0x0002,0x00000000,0x1b1e0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:RegisterEventSourceA ((null),&quot;WineSrc20&quot;): stub
0046:fixme:advapi:RegisterEventSourceW (L&quot;&quot;,L&quot;WineSrc20&quot;): stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0002,0x0002,0x00000009,0x1b3d0,0x0000,0x00000000,0x0,0x0): stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:DeregisterEventSource (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;WineSrc300&quot;) stub
0046:fixme:advapi:ReportEventA (0xcafe4242,0x0001,0x0002,0x0000000a,0x1b3d0,0x0001,0x00000000,0x7f7ff72beb00,0x0): stub
0046:fixme:advapi:ReportEventW (0xcafe4242,0x0001,0x0002,0x0000000a,0x1b3d0,0x0001,0x00000000,0x1b1e0,0x0): stub
0046:err:eventlog:ReportEventW L&quot;First string&quot;
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:GetOldestEventLogRecord (0xcafe4242,0x22fa8c) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
0046:fixme:advapi:OpenEventLogW ((null),L&quot;Wine&quot;) stub
0046:fixme:advapi:GetNumberOfEventLogRecords (0xcafe4242,0x22fa80) stub
0046:fixme:advapi:CloseEventLog (0xcafe4242) stub
eventlog.c:889: Tests skipped: No events were written to the eventlog
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;this name is too long&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x0) stub
0046:fixme:advapi:StartTraceA (0x0, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:StartTraceA (0x22fb40, &quot;wine&quot;, 0x1b1e0) stub
0046:fixme:advapi:ControlTraceA (cafe4242, &quot;wine&quot;, 0x1b1e0, 1) stub
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so lsa &amp;&amp; touch lsa.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
004a:fixme:advapi:LsaOpenPolicy ((null),0x22f960,0x000f0fff,0x22f930) stub
004a:fixme:security:GetWindowsAccountDomainSid (000000000022F690 0000000000019078 000000000022F68C): semi-stub
004a:fixme:advapi:LsaEnumerateAccountRights (0xcafe,0x22fa20,0x22f990,0x22f92c) stub
004a:fixme:advapi:LsaClose (0xcafe) stub
004a:fixme:advapi:LsaOpenPolicy ((null),0x22fb10,0x000f0fff,0x22fae8) stub
004a:fixme:advapi:LsaClose (0xcafe) stub
004a:fixme:advapi:LsaOpenPolicy ((null),0x22fb40,0x00000800,0x22fb00) stub
004a:fixme:advapi:LsaClose (0xcafe) stub
004a:fixme:advapi:LsaOpenPolicy ((null),0x22fb40,0x00000800,0x22fb08) stub
/usr/pkgsrc/wip/wine64-dev/work/wine-4.13/tools/runtest -q -P wine -T ../../.. -M advapi32.dll -p advapi32_test.exe.so registry &amp;&amp; touch registry.ok
/usr/pkg/emul/netbsd32/lib/wine/libwine.so.1: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/ntdll.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernel32.dll.so: text relocations
/usr/pkg/emul/netbsd32/lib/wine/wine/kernelbase.dll.so: text relocations
004e:fixme:reg:RegQueryInfoKeyA security argument not supported.
004e:fixme:reg:RegQueryInfoKeyW security argument not supported.
004e:fixme:reg:RegQueryInfoKeyA security argument not supported.
004e:fixme:reg:RegQueryInfoKeyW security argument not supported.
004e:fixme:reg:RegQueryInfoKeyA security argument not supported.
004e:fixme:reg:RegQueryInfoKeyW security argument not supported.
registry.c:2850: Tests skipped: HKCR key merging not supported
registry.c:3146: Tests skipped: HKCR key merging not supported
004e:fixme:winspool:PerfOpen (null): stub
004e:fixme:winspool:PerfCollect L&quot;Global&quot;, 0x22ead8, 0x22eabc, 0x22eac0: stub
004e:fixme:winspool:PerfClose stub
004e:fixme:winspool:PerfOpen (null): stub
004e:fixme:winspool:PerfCollect L&quot;invalid counter name&quot;, 0x22ead8, 0x22eabc, 0x22eac0: stub
004e:fixme:winspool:PerfClose stub
registry.c:4032: Test failed: [ 9] expected 1168, got 2
registry.c:4032: Test failed: [10] expected 1814, got 2
*** Error code 2

Stop.
make[1]: stopped in /usr/pkgsrc/wip/wine64-dev/work/wine-4.13/wine64/dlls/advapi32/tests
*** Error code 1

Stop.
make: stopped in /usr/pkgsrc/wip/wine64-dev/work/wine-4.13/wine64
&lt;/pre&gt;

&lt;/p&gt;

&lt;h3&gt;Running programs on Wine&lt;/h3&gt;
&lt;p&gt;
  You can find obligatory screenshots of Wine-4.4/4.13 on amd64/i386
  below:
&lt;/p&gt;  


&lt;div style=&quot;font-size:80%; text-align:center&quot;&gt;
&lt;img alt=&quot;010 Editor (Professional Text/Hex Editor) on Wine-4.13 (amd64)&quot; src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_010editor.png&quot; width=&quot;800&quot; /&gt;
010 Editor (Professional Text/Hex Editor) on Wine-4.13 (amd64)&lt;/div&gt;

&lt;br /&gt;

&lt;div style=&quot;font-size:80%; text-align:center&quot;&gt;
&lt;img alt=&quot;Notepad++ on Wine-4.4 (i386)&quot; src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_notepadpp.png&quot; width=&quot;800&quot; /&gt;
Notepad++ on Wine-4.4 (i386)&lt;/div&gt;

&lt;br /&gt;

&lt;div style=&quot;font-size:80%; text-align:center&quot;&gt;
&lt;img alt=&quot;Pinball on Wine-4.13 (amd64)&quot; src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_pinball.png&quot; width=&quot;800&quot;&gt;
Pinball on Wine-4.13 (amd64)&lt;/div&gt;

&lt;h3&gt;How to run Wine on NetBSD/amd64&lt;/h3&gt;

&lt;ul style=&quot;list-style-type:square;&quot;&gt;
  &lt;li&gt;Compile kernel with &lt;strong&gt;USER_LDT&lt;/strong&gt; enabled.&lt;/li&gt;
  &lt;li&gt;Install kernel.&lt;/li&gt;
  &lt;li&gt;Clone wip repo.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;cd /usr/pkgsrc/wip/wine64; make install&lt;/code&gt; (for 4.4)&lt;/li&gt; or
  &lt;li&gt;&lt;code&gt;cd /usr/pkgsrc/wip/wine64-dev; make install&lt;/code&gt; (for 4.13)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;wine notepad&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Future Plans&lt;/h3&gt;
&lt;p&gt;
  Wine requires the kernel option
  &lt;a href=&quot;//mail-index.NetBSD.org/tech-kern/2017/02/05/msg021545.html&quot;&gt;USER_LDT&lt;/a&gt;
  to be able to run 32-bit applications on amd64 - facilitated by
  &lt;strong&gt;WoW64&lt;/strong&gt;. Presently, this feature isn&apos;t enabled by
  default on NetBSD and hence, the kernel has to be compiled with
  &lt;code&gt;USER_LDT&lt;/code&gt; enabled.  I will work on getting the tests to pass and
  finding a better approach to deal with &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; issue.
  In addition to that, I shall work on incorporating a NetBSD VM to Wine
  Test Bot infrastructure so we can preclude Wine from getting out of
  shape on NetBSD in the future (work in progress).
&lt;/p&gt;

&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;
  Presently, Wine-4.4 and Wine-4.13 are working fine on amd64/i386. I
  have been able to meet all the goals as per my original plan. I
  would like to attribute the success to the support provided by my
  mentors @leot, @maya and @christos. I would also like to thank my
  mentor @maxv for solving the conflict between &lt;code&gt;SVS&lt;/code&gt; and &lt;code&gt;USER_LDT&lt;/code&gt;
  kernel options. I intend to maintain the packages
  &lt;code&gt;wine64&lt;/code&gt;/&lt;code&gt;wine64-dev&lt;/code&gt;/&lt;/code&gt;wine32&lt;/code&gt; for the foreseeable future. As stated
  above, I shall try to set up a NetBSD VM as Wine Test Bot for
  purpose of CI.  Once again, thanks to Google for enabling me to do
  what I love.
&lt;/p&gt;

&lt;h3&gt;Source Code&lt;/h3&gt;
&lt;p&gt;
  &lt;li&gt;&lt;a href=&quot;https://source.winehq.org/git/wine.git/commit/de5392bfe7919c180d6650eec7b57b5386a4796f&quot;&gt;Commit:
  Wine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=search;h=311c305bf8afadbf45ffd9922a14a840e0b72a44;s=Naveen+Narayanan;st=author
&quot;&gt;Commit:
      pkgsrc WIP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pkgsrc.se/wip/wine64&quot;&gt;Package: Wine64&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pkgsrc.se/wip/wine64-dev&quot;&gt;Package: Wine64-dev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pkgsrc.se/wip/wine32&quot;&gt;Package: Wine32&lt;/a&gt;&lt;/li&gt;
&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on2</id>
        <title type="html">Porting wine to amd64 on NetBSD, second evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on2"/>
        <published>2019-08-01T11:48:34+00:00</published>
        <updated>2019-08-01T11:48:34+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc2019" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="amd64" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wine" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;
&lt;p&gt;
    This report encompasses the progress of the project during the
    second coding period.
&lt;/p&gt;
&lt;p&gt;
    As getting Wine to work with WoW64 support was of foremost
    importance, my focus was on compat32 dependency packages without
    which Wine&apos;s functionality would be limited and more importantly
    untestable. Initially, being unaware of what to expect, I just
    wanted Wine to run, at the earliest. So, with outmost support from
    mentors, the consensus was to install libs from 32-bit packages to
    &lt;code&gt;${PREFIX}/lib/32&lt;/code&gt; and ignore everything else that came with the
    respective packages.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;
&lt;p&gt;
    This report encompasses the progress of the project during the
    second coding period.
&lt;/p&gt;
&lt;h2&gt;WINE on amd64&lt;/h2&gt;
&lt;p&gt;
    As getting Wine to work with WoW64 support was of foremost
    importance, my focus was on compat32 dependency packages without
    which Wine&apos;s functionality would be limited and more importantly
    untestable. Initially, being unaware of what to expect, I just
    wanted Wine to run, at the earliest. So, with outmost support from
    mentors, the consensus was to install libs from 32-bit packages to
    &lt;code&gt;${PREFIX}/lib/32&lt;/code&gt; and ignore everything else that came with the
    respective packages.
&lt;/p&gt;
&lt;p&gt;
    I had most of the compat32 packages ready after a couple of
    days. And it was time we gave Wine a whirl. Well, the build was
    successful. However, I had problems with 32-bit Xorg. The
    applications which came packaged with Wine worked fine, but, other
    Microsoft Windows applications like notepad++, Mario etc had a
    hard time running. Additionally, I noticed that fontconfig went
    wild and crashed spewing errors symptomatic of Wine (32-bit) not
    playing nice with the fontconfig lib that came with 32-bit Xorg
    package. On top of this, I found that build failed on certain
    machines due to unavailability of headers. This made us reconsider
    our decision to install 32-bit libs to &lt;code&gt;${PREFIX}/lib/32&lt;/code&gt; and ignore
    everything else which included headers and binaries.
&lt;/p&gt;
&lt;p&gt;
    Ultimately, we realized that it was time we found a proper
    solution to the problem of where 32-bit packages should be
    installed on NetBSD amd64 and then, we eventually settled on
    &lt;code&gt;${PREFIX}/emul/netbsd32/&lt;/code&gt;. It seemed logical, and I
    got on with the task of adapting the respective Makefiles of
    dependency packages to install
    to &lt;code&gt;${PREFIX}/emul/netbsd32/&lt;/code&gt;. Additionally, I packaged
    fontconfig (32-bit) in high hopes that Wine would behave
    appropriately with the former. Wine build was successful. However,
    I noticed that Wine wasn&apos;t linking against the fontconfig libs
    from my package but against the ones which came with 32-bit Xorg
    package. Later, I realized, after consulting with mentors, that
    pkgsrc doesn&apos;t search for pkgconfig files (*.pc)
    in &lt;code&gt;${PREFIX}/emul/netbsd32/lib&lt;/code&gt; by default. pkgsrc
    sets
    &lt;a href=&quot;https://github.com/NetBSD/pkgsrc/blob/trunk/mk/tools/pkg-config.mk&quot;&gt;
    _PKG_CONFIG_LIBDIR&lt;/a&gt; appropriately based
    on &lt;code&gt;${LIBABISUFFIX}&lt;/code&gt;. As you can see, it doesn&apos;t search
    for .pc files in &lt;code&gt;${PREFIX}/emul/netbsd32/lib&lt;/code&gt; and
    hence, pkgconfig couldn&apos;t get the right flags for fontconfig
    package. On the other hand, Wine configure script found fontconfig
    libs provided by 32-bit Xorg package against which it linked
    wine. A kludgy workaround was to use configure args for the
    respective libs thereby, obviating configure from finding the
    wrong libs.  Finally, with the help of aforementioned kludgy
    workarounds, we were able to build Wine and successfully run Mario
    and Lua (32-bit binaries).
&lt;/p&gt;

&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_smbx.png&quot; alt=&quot;Running smbx.exe and Lua installer in wine on NetBSD/amd64&quot; height=&quot;1000&quot; width=&quot;800&quot; /&gt;

&lt;br /&gt;

&lt;img src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_lua.png&quot; alt=&quot;Running SciTE and Lua in wine on NetBSD/amd64&quot; height=&quot;1000&quot; width=&quot;800&quot; /&gt;

&lt;h3&gt;How to run Wine on NetBSD -current&lt;/h3&gt;
&lt;ul style=&quot;list-style-type:square;&quot;&gt;
  &lt;li&gt; Build -current distribution. &lt;/li&gt;
  &lt;li&gt; Compile -current kernel with &lt;strong&gt;USER_LDT&lt;/strong&gt; enabled and &lt;strong&gt;SVS&lt;/strong&gt;
    disabled. &lt;/li&gt;
  &lt;li&gt; Install kernel and distribution. &lt;/li&gt;
  &lt;li&gt; Clone wip repo. &lt;/li&gt;
  &lt;li&gt; &lt;code&gt;cd /usr/pkgsrc/wip/wine64; make install&lt;/code&gt; &lt;/li&gt;
  &lt;li&gt; &lt;code&gt;export LD_LIBRARY_PATH=/usr/pkg/emul/netbsd32/lib; wine
    mario.exe&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Future Plans&lt;/h3&gt;
&lt;p&gt;
  Wine requires the kernel option
  &lt;a href=&quot;//mail-index.NetBSD.org/tech-kern/2017/02/05/msg021545.html&quot;&gt;USER_LDT&lt;/a&gt;
  to be able to run 32-bit applications on amd64 - facilitated by
  &lt;strong&gt;WoW64&lt;/strong&gt;. Presently, this feature isn&apos;t enabled by default on NetBSD
  and hence, the kernel has to be compiled with USER_LDT enabled. This
  also warrants the kernel option SVS to be disabled currently owing
  to compatability issues.  Work is being done to resolve the conflict
  which would apparently allow USER_LDT to be enabled by default in
  the GENERIC kernel.
&lt;/p&gt;
&lt;p&gt;
  &lt;a href=&quot;https://github.com/NetBSD/pkgsrc/blob/trunk/mk/tools/pkg-config.mk&quot;&gt;pkgsrc&lt;/a&gt;
  can be made to search for pkgconf config files in
  &lt;code&gt;${PREFIX}/emul/netbsd32/lib&lt;/code&gt; by setting
  _PKG_CONFIG_LIBDIR to
  &lt;code&gt;${BUILDLINK_DIR}${LIBABIPREFIX}/lib${LIBABISUFFIX}&lt;/code&gt; as
  per @maya&apos;s suggestion. It might take some more thought and time
  before we finalize it.
&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;
   Presently, Wine on amd64 is in test phase. It seems to work fine
   with caveats like LD_LIBRARY_PATH which has to be set as 32-bit
   Xorg libs don&apos;t have &lt;code&gt;${PREFIX}/emul/netbsd32/lib&lt;/code&gt; in its rpath
   section. The latter is due to us extracting 32-bit libs from
   tarballs in lieu of building 32-bit Xorg on amd64. As previously
   stated, pkgsrc doesn&apos;t search for pkgconfig files in
   &lt;code&gt;${PREFIX}/emul/netbsd32/lib&lt;/code&gt; which might have inadvertent effects
   that I am unaware of as of now. I shall be working on these issues
   during the final coding period.  I would like to thank @leot, @maya
   and @christos for saving me from shooting myself in the foot
   many a time. I, admittedly, have had times when multiple
   approaches, which all seemed right at that time, perplexed me. I
   believe those are times when having a mentor counts, and I have
   been lucky enough to have really good ones. Once again, thanks to
   Google for this wonderful opportunity.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/implementation_of_drm_ioctl_support</id>
        <title type="html">Implementation of DRM ioctl Support for NetBSD kernel</title>
        <author><name>Christos Zoulas</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/implementation_of_drm_ioctl_support"/>
        <published>2019-07-08T18:33:04+00:00</published>
        <updated>2019-07-08T18:33:04+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="linux" scheme="http://roller.apache.org/ns/tags/" />
        <category term="drm" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
This report was prepared by Surya P as a part of Google Summer of Code 2019
&lt;/p&gt;
&lt;p&gt;
Enabling support of DRM ioctls in linux emulation.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
This report was prepared by Surya P as a part of Google Summer of Code 2019
&lt;/p&gt;
&lt;h2&gt;
What is DRM ioctl ?
&lt;/h2&gt;
&lt;p&gt;
Ioctls are input/output control system calls and DRM stands for direct rendering manager The DRM layer provides several services to graphics drivers, many of them driven by the application interfaces it provides through libdrm, the library that wraps most of the DRM ioctls. These include vblank event handling, memory management, output management, framebuffer management, command submission &amp; fencing, suspend/resume support, and DMA services.
&lt;/p&gt;
&lt;h2&gt;
Native DRM ioctl calls
&lt;/h2&gt;
&lt;p&gt;
NetBSD was able to make native DRM ioctl calls with hardware rendering once xorg and proper mesa packages where installed. We used the glxinfo and glxgears applications to test this out.
&lt;/p&gt;
&lt;img alt=&quot;X desktop glxgears&quot; src=&quot;//www.NetBSD.org/~christos/blog-posts/gsoc/2019/drm/image2.png&quot; /&gt;
&lt;h2&gt;
DRM ioctl calls from emulation 
&lt;/h2&gt;
&lt;p&gt;
In order to make sure DRM ioctl calls where also made from the linux emulation layer of NetBSD . We used rpm and suse131 packages
In specific base,compat,X11,libdrm,libglx,libexpat packages where used.
To my surprise the applications kept segfaulting . I used glxgears and glxinfo rpm packages for this test .when I analyzed the segfault and traced the process , I was able to identify the cause of the segfault which was caused due to broken suse131 libdrm package which did not support nouveau based cards.
To further make user that the problem was with the suse packages , I downgraded to suse121 and as expected the glxinfo and glxgears rpm packages ran, but it was using software rendering instead of hardware rendering but nevertheless we were still able to see the DRM ioctl calls made by the emulation layer hence we added some print statements in the kernel source to identify the calls made.
&lt;/p&gt;
&lt;img alt=&quot;Bash shell showing ioctls&quot; src=&quot;//www.NetBSD.org/~christos/blog-posts/gsoc/2019/drm/image1.png&quot; /&gt;
&lt;h2&gt;
Summary
&lt;/h2&gt;
&lt;p&gt;
Fixing the Suse131 package and enabling hardware rendering from emulation is of highest priority , I have also planned to port steam and its dependencies to NetBSD to incorporate some gaming on NetBSD! And finally conversion between 32bit DRM ioctl calls 64bit DRM ioctl calls will be implemented.
&lt;/p&gt;
&lt;p&gt;
Last but not the least I would like to thank my mentor @christos , @maya , @leot for helping me out and guiding me throughout the process and Google for providing me with such a wonderful opportunity to work with NetBSD community.
&lt;/p&gt;

</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/porting_netbsd_to_hummingboard_pulse</id>
        <title type="html">Porting NetBSD to HummingBoard Pulse, Part 1</title>
        <author><name>jmcneill</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/porting_netbsd_to_hummingboard_pulse"/>
        <published>2019-06-30T13:05:27+00:00</published>
        <updated>2019-06-30T13:25:26+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="arm64" scheme="http://roller.apache.org/ns/tags/" />
        <category term="arm" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
&lt;i&gt;This report was written by Saurav Prakash as part of Google Summer of Code 2019.&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
My venture into the first phase of The Google Summer of Code is nearing an end. The experience was enriching in every dimension, and the learning exposure I was subjected to was genuinely worthwhile. Here is a brief report on the work I have performed during this coding period.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
&lt;i&gt;This report was written by Saurav Prakash as part of Google Summer of Code 2019.&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
My venture into the first phase of The Google Summer of Code is nearing an end. The experience was enriching in every dimension, and the learning exposure I was subjected to was genuinely worthwhile. Here is a brief report on the work I have performed during this coding period.
&lt;/p&gt;

&lt;h2&gt;About HummingBoard Pulse&lt;/h2&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.solid-run.com/nxp-family/hummingboard-pulse/&quot;&gt;HummingBoard Pulse&lt;/a&gt; is an arm64 board developed by &lt;a href=&quot;https://www.solid-run.com&quot;&gt;SolidRun&lt;/a&gt;, with iMX8 System-on-Chip, Dual/Quad core Cortex A53 processor. This project involves extending the GENERIC64 kernel to support iMX8 SoC.
&lt;/p&gt;

&lt;h2&gt;Device Tree Files&lt;/h2&gt;

&lt;p&gt;
We compare the compatible property of the root node in the device tree with the list of ARM platforms compiled into the kernel. We add the .dts file for &lt;a href=&quot;https://github.com/SauravPrakash98/netbsd-src/blob/build_1/sys/arch/arm/dts/imx8mq-hummingboard-pulse.dts&quot;&gt;imx8&lt;/a&gt; which is compatible with the imx8mq.dtsi file adopted from the Linux mainline 5.1.4.
At this early stage, nodes for uart, iomux and clock only were created.
&lt;/p&gt;

&lt;h2&gt;Board Platform Code&lt;/h2&gt;

&lt;p&gt;
The platform code provides SoC specific &lt;a href=&quot;https://github.com/SauravPrakash98/netbsd-src/blob/build_1/sys/arch/arm/nxp/imx8_platform.c&quot;&gt;code&lt;/a&gt; needed early at boot. The arm_platform structure for imx8 is initialised here. It contains function pointers like
.ap_attach_init_args,
.ap_device_register,
.ap_reset,
.ap_delay,
.ap_uart_freq,
.ap_mpstart
and a, platform_early_putchar_function so that we can send a character to UART.
&lt;/p&gt;

&lt;h2&gt;Clock Driver&lt;/h2&gt;

&lt;p&gt;
During the booting stage we only need to enable the uart clocks (IMX8MQ_CLK_UART*_ROOT) and its parents. This includes writing drivers for
fixed clocks (OSC_25M, OSC_27M, OSC_32K, and more),
fixed-factor clocks,
divider clocks,
mux clocks,
composite clocks (IMX8MQ_CLK_UART*),
gate clocks (IMX8MQ_CLK_UART*_ROOT),
sccg-pll clocks,
and frac-pll clocks.
&lt;/p&gt;

&lt;h2&gt;UART Driver&lt;/h2&gt;

&lt;p&gt;
The imx drivers are separated between &quot;core driver&quot; and &quot;bus glue&quot;. &amp;lt;arch/arm/imx/imxuart.c&amp;gt; is a &quot;core driver&quot;, and we need to write a fdt based &lt;a href=&quot;https://github.com/SauravPrakash98/netbsd-src/blob/build_1/sys/arch/arm/nxp/imx8_uart.c&quot;&gt;&quot;bus glue&quot;&lt;/a&gt; for the custom bus, this non-fdt based imx code currently uses.
&lt;/p&gt;

You can checkout the code from &lt;a href=&quot;https://github.com/SauravPrakash98/netbsd-src/tree/build_1&quot;&gt;here&lt;/a&gt;.

&lt;h2&gt;What&apos;s Next&lt;/h2&gt;

&lt;p&gt;
The sccg-pll, frac-pll, composite clocks aren&apos;t complete yet. So the focus in the next weeks would be to complete the unfinished work as required for the board to be booting till root. Finalising the UART driver code. Modifying the drivers written now, to suit the needs later. And then moving on further to write iomux driver, and then a USB driver for a storage device to boot from.
&lt;/p&gt;

&lt;p&gt;
Lastly I would like to thank my mentors, @jmcneill, @martin @Cryo for being a constant support and non-flickering guidance throughout the process.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on</id>
        <title type="html">Porting Wine to amd64 on NetBSD, first evaluation report</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/porting_wine_to_amd64_on"/>
        <published>2019-06-30T11:31:31+00:00</published>
        <updated>2019-06-30T11:31:31+00:00</updated> 
        <category term="/General" label="General" />
        <category term="pkgsrc" scheme="http://roller.apache.org/ns/tags/" />
        <category term="wine" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;

&lt;p&gt;
I have been working on porting Wine to amd64 on NetBSD as a GSoC
2019 project.
&lt;a href=&quot;https://www.winehq.org/&quot;&gt;Wine&lt;/a&gt;
is a compatibility layer which allows running
Microsoft Windows applications on POSIX-complaint operating
systems. This report provides an overview of the progress of the
project during the first coding period.
&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;
This report was written by Naveen Narayanan as part of Google Summer of Code 2019.
&lt;/p&gt;

&lt;p&gt;
I have been working on porting Wine to amd64 on NetBSD as a GSoC
2019 project.
&lt;a href=&quot;https://www.winehq.org/&quot;&gt;Wine&lt;/a&gt;
is a compatibility layer which allows running
Microsoft Windows applications on POSIX-complaint operating
systems. This report provides an overview of the progress of the
project during the first coding period.
&lt;/p&gt;

&lt;h2&gt;WINE on i386&lt;/h2&gt;
&lt;p&gt;
Initially, when I started working on getting Wine-4.4 to build and
run on NetBSD i386 the primary issue that I faced was Wine
displaying black windows instead of UI, and this applied to any
graphical program I tried running with Wine.
&lt;/p&gt;
&lt;p&gt;
I suspected it , as it is related to graphics, to be
an issue with the graphics driver or Xorg. Subsequently, I tried
building modular Xorg, and I tried running Wine on it only to
realize that Xorg being modular didn&apos;t affect it in the least.
After having tried a couple of configurations, I realized that trying
to hazard out every other probability is going to take an awful lot
of time that I didn&apos;t have. This motivated me to bisect the
repo using git, and find the first version of Wine which failed on NetBSD.
&lt;/p&gt;
&lt;p&gt;
I started with the last version of Wine that worked on NetBSD which
is 1.9.18. After two days of git bisect, I had the culprit. It was a
commit that introduced a single clipboard manager thread per window
station in Wine. Later, I found that
&lt;a href=&quot;//man.NetBSD.org/pthread_create.3&quot;&gt;pthread_create(3)&lt;/a&gt;
calls were borked
and didn&apos;t return anything. I tried to walk through the code to
know where in pthreads lib was the program getting stuck
at. Finally, I got a segfault.
&lt;/p&gt;
&lt;p&gt;
I realized the address at which it segfaulted was identical to the
address at which Wine has been throwing an unhandled page
fault. I had a hunch that these two issues were some how correlated.
After learning more about memory mapping and /proc, I was sure black
windows was an effect of this unhandled page fault.
&lt;/p&gt;
&lt;p&gt;
Eventually, I found that
&lt;a href=&quot;//man.NetBSD.org/pthread_attr_setstack.3&quot;&gt;pthread_attr_setstack(3)&lt;/a&gt;
was setting the guard
size to 65536 bytes even though the man page said otherwise. And
Wine relied on it not being set. This resulted in out-of-bound
access which caused the unhandled page fault. After setting the
guard size to 0 using
&lt;a href=&quot;//man.NetBSD.org/pthread_attr_setguardsize.3&quot;&gt;pthread_attr_setguardsize(3)&lt;/a&gt;,
Wine started
behaving fine. 
&lt;/p&gt;
&lt;p&gt;
I discussed about the patch with Wine devs, and they were happy to
upstream it as long as it didn&apos;t cause any inadvertent issues on
other platforms. Of course, who wouldn&apos;t want to play mario now?
&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&quot;Screenshot of mario running under wine&quot; src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine_mario.png&quot; height=&quot;800&quot; width=&quot;800&quot; /&gt;
&lt;/p&gt;

&lt;h2&gt;WINE on amd64&lt;/h2&gt;
&lt;p&gt;
Compiling Wine with 32 bit support is a bit tricky on amd64.
I proceeded with the chroot approach as I wanted to know if Wine
worked as promised on NetBSD, and if it didn&apos;t, to what degree,
it required patching. So, as the first step, I compiled Wine on
amd64 and it ran fine. The subsequent step was to build a chroot
environment for i386. I corresponded with my mentors to learn
more about compat32_netbsd and successfully built an i386 chroot.
I had to compile Wine twice under i386 to have it inject the 32 bit
components to 64 bit Wine for WoW64 support. And to my amazement, it
worked!
&lt;/p&gt;

&lt;p&gt;
&lt;img alt=&quot;Screenshot of notepad running under wine32&quot; src=&quot;//www.NetBSD.org/~leot/blog-posts/imgs/wine32.png&quot; height=&quot;800&quot; width=&quot;800&quot; /&gt;
&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;
I think Wine-4.4 is in pretty good shape as of right now, but
packaging it is tricky especially since chroot isn&apos;t an option, as it
is privileged. I have been writing compat32 packages for dependencies
of Wine to have them crosscompiled on amd64. I shall be working on
getting Wine crosscompiled for 32 bit support on amd64 during the next
coding period.

On a different note and a very important one, I would like to thank my
mentors @christos, @leot, @maya, and @maxv for their valuable
suggestions. From where I see it, I wouldn&apos;t have reached this phase if
it weren&apos;t for them. I would also like to thank @kamil for his
feedback and input.
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/lldb_from_trunk_is_running</id>
        <title type="html">LLDB from trunk is running on NetBSD once again!</title>
        <author><name>Michał Górny</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/lldb_from_trunk_is_running"/>
        <published>2019-03-02T18:52:08+00:00</published>
        <updated>2019-03-02T18:52:08+00:00</updated> 
        <category term="/General" label="General" />
        <category term="lldb" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;Upstream describes LLDB as &lt;cite&gt;a next generation, high-performance debugger&lt;/cite&gt;.
It is built on top of LLVM/Clang toolchain, and features great
integration with it.  At the moment, it primarily supports debugging C,
C++ and ObjC code, and there is interest in extending it to more
languages.&lt;/p&gt;
&lt;p&gt;Originally, LLDB was ported to NetBSD by Kamil Rytarowski.  However,
multiple upstream changes and lack of continuous testing have resulted
in decline of support.  So far we haven&apos;t been able to restore
the previous state.&lt;/p&gt;
&lt;p&gt;In February, I have started working on LLDB, as contracted by the NetBSD
Foundation.  LLDB used to work on NetBSD before but the support recently
regressed.  Therefore, my four first goals as detailed in the &lt;a class=&quot;reference external&quot; href=&quot;http://blog.netbsd.org/tnf/entry/final_report_on_clang_lld#future-plans-lldb&quot;&gt;previous
report&lt;/a&gt; were:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;&lt;p&gt;Restore tracing in LLDB for NetBSD (i386/amd64/aarch64) for
single-threaded applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restore execution of LLDB regression tests, unless there is need
for a significant LLDB or kernel work, mark detected bugs as failing
or unsupported ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable execution of LLDB regression tests on the buildbot in order
to catch regressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upstream NetBSD (i386/amd64) core(5) support. Develop LLDB
regression tests (and the testing framework enhancement)
as requested by upstream.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Of those tasks, I consider running regression tests on the buildbot
the highest priority.  Bisecting regressions post-factum is hard due
to long build times, and having continuous integration working is going
to be very helpful to maintaining the code long-term.&lt;/p&gt;
&lt;p&gt;In this report, I&apos;d like to summarize what I achieved and what technical
difficulties I met.&lt;/p&gt;</summary>
        <content type="html">&lt;p&gt;Upstream describes LLDB as &lt;cite&gt;a next generation, high-performance debugger&lt;/cite&gt;.
It is built on top of LLVM/Clang toolchain, and features great
integration with it.  At the moment, it primarily supports debugging C,
C++ and ObjC code, and there is interest in extending it to more
languages.&lt;/p&gt;
&lt;p&gt;Originally, LLDB was ported to NetBSD by Kamil Rytarowski.  However,
multiple upstream changes and lack of continuous testing have resulted
in decline of support.  So far we haven&apos;t been able to restore
the previous state.&lt;/p&gt;
&lt;p&gt;In February, I have started working on LLDB, as contracted by the NetBSD
Foundation.  My four first goals as detailed in the &lt;a class=&quot;reference external&quot; href=&quot;http://blog.netbsd.org/tnf/entry/final_report_on_clang_lld#future-plans-lldb&quot;&gt;previous
report&lt;/a&gt; were:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;&lt;p&gt;Restore tracing in LLDB for NetBSD (i386/amd64/aarch64) for
single-threaded applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restore execution of LLDB regression tests, unless there is need
for a significant LLDB or kernel work, mark detected bugs as failing
or unsupported ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable execution of LLDB regression tests on the buildbot in order
to catch regressions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upstream NetBSD (i386/amd64) core(5) support. Develop LLDB
regression tests (and the testing framework enhancement)
as requested by upstream.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Of those tasks, I consider running regression tests on the buildbot
the highest priority.  Bisecting regressions post-factum is hard due
to long build times, and having continuous integration working is going
to be very helpful to maintaining the code long-term.&lt;/p&gt;
&lt;p&gt;In this report, I&apos;d like to summarize what I achieved and what technical
difficulties I met.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;the-kqueue-interoperability-issues&quot;&gt;
&lt;h2&gt;The kqueue interoperability issues&lt;/h2&gt;
&lt;p&gt;Given no specific clue as to why LLDB was no longer able to start
processes on NetBSD, I&apos;ve decided to start by establishing the status of
the test suites.  More specifically, I&apos;ve started with a small subset of
LLDB test suite &#8212; unittests.  In this section, I&apos;d like to focus on two
important issues I had with them.&lt;/p&gt;
&lt;p&gt;Firstly, one of the tests was hanging indefinitely.  As I established,
the purpose of the test was to check whether the main loop
implementation correctly detects and reports when all the slaves
of a pty are disconnected (and therefore the reads on master would
fail).  Through debugging, I&apos;ve came to the conclusion that &lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt;
is not reporting this particular scenario.&lt;/p&gt;
&lt;p&gt;I have built a simple test case (which is now &lt;a class=&quot;reference external&quot; href=&quot;http://cvsweb.netbsd.org/bsdweb.cgi/src/tests/kernel/kqueue/read/t_ttypty.c.diff?r1=1.2&amp;amp;r2=1.3&amp;amp;only_with_tag=MAIN&quot;&gt;part of kqueue ATF
tests&lt;/a&gt;) and confirmed it.  Afterwards, I have attempted to establish
whether this behavior is correct.  While &lt;cite&gt;kqueue(2)&lt;/cite&gt; does not mention
ptys specifically, it states the following for pipes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;dl&gt;
&lt;dt&gt;Fifos, Pipes&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Returns when there is data to read; data contains the
number of bytes available.&lt;/p&gt;
&lt;p&gt;When the last writer disconnects, the filter will set
EV_EOF in flags.  This may be cleared by passing in
EV_CLEAR, at which point the filter will resume
waiting for data to become available before returning.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;
&lt;p&gt;Furthermore, my test program indicated that FreeBSD exhibits
the described EV_EOF behavior.  Therefore, I have decided to write
a kernel patch adding this functionality, submitted it to review
and eventually committed it after applying helpful suggestions from
Robert Elz (&lt;a class=&quot;reference external&quot; href=&quot;http://mail-index.netbsd.org/tech-kern/2019/02/07/msg024616.html&quot;&gt;[PATCH v3] kern/tty_pty: Fix reporting EOF via kevent and
add a test case&lt;/a&gt;).
I have also disabled the test case temporarily since the functionality
is non-critical to LLDB (&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/01486b22bb62a4020b39001df25442fa2b1d2228&quot;&gt;r353545&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Secondly, a few gdbserver-based tests were flaky &#8212; i.e. unpredictably
passed and failed every iteration.  I&apos;ve started debugging this with a test
whose purpose was to check verbose error messages support
in the protocol.  To my surprise, it seemed as if gdbserver worked fine
as far as error message exchange was concerned.  This packet was
followed by a termination request from client &#8212; and it seemed that
the server sometimes replies to it correctly, and sometimes terminates
just before receiving it.&lt;/p&gt;
&lt;p&gt;While working on this particular issue, I&apos;ve noticed a few deficiencies
in LLDB&apos;s error handling.  In this case, this involved two major issues:&lt;/p&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;&lt;p&gt;gdbserver ignored errors from main loop.  As a result, if
&lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt; failed, it silently exited with a successful status.
I&apos;ve fixed it to catch and report the error verbosely instead:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/2d874e53561c749fde6efa51650bb0c49d89851a&quot;&gt;r354030&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Main loop reported meaningless return value (&lt;cite&gt;-1&lt;/cite&gt;) from &lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt;.
I&apos;ve established that most likely all &lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt; implementation use
&lt;cite&gt;errno&lt;/cite&gt; instead, and made the function return it:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/c23f82c026049d574eef73af3b85e63598d9b0a3&quot;&gt;r354029&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After applying those two fixes, gdbserver clearly indicated the problem:
&lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt; returned due to &lt;cite&gt;EINTR&lt;/cite&gt; (i.e. the process receiving
a signal).  Lacking correct handling for this value, the main loop
implementation wrongly treated it as fatal error and terminated
the program.  I&apos;ve fixed this via implementing &lt;cite&gt;EINTR&lt;/cite&gt; support for
&lt;span class=&quot;docutils literal&quot;&gt;kevent()&lt;/span&gt; in &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/53eabaab3f59ca9b32a3775f1cb7bf51717fa354&quot;&gt;r354122&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This trivial fix not only resolved most of the flaky tests but also
turned out to be the root cause for LLDB being unable to start
processes.  Therefore, at this point tracing for single-threaded
processes was restored on amd64.  Testing on other platforms is pending.&lt;/p&gt;
&lt;p&gt;Now, for the moral: working error reporting can save a lot of time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;socket-issues&quot;&gt;
&lt;h2&gt;Socket issues&lt;/h2&gt;
&lt;p&gt;The next issue I hit while working on the unittests is rather curious,
and I have to admit I haven&apos;t managed to neither find the root cause
or build a good reproducer for it.  Nevertheless, I seem to have caught
the gist of it and found a good workaround.&lt;/p&gt;
&lt;p&gt;The test in question focuses on the high-level socket API in LLDB.  It
is rather trivial &#8212; it binds a server in one thread, and tries to
connect to it from a second thread.  So far, so good.  Most of the time
the test works just fine.  However, sometimes &#8212; especially early after
booting &#8212; it hangs forever.&lt;/p&gt;
&lt;p&gt;I&apos;ve debugged this thoroughly and came to the following conclusion:
the test binds to &lt;span class=&quot;docutils literal&quot;&gt;127.0.0.1&lt;/span&gt; (i.e. purely IPv4) but tries to connect
to &lt;span class=&quot;docutils literal&quot;&gt;localhost&lt;/span&gt;.  The latter results in the client trying IPv6 first,
failing and then succeeding with IPv4.  The connection is accepted,
the test case moves forward and terminates successfully.&lt;/p&gt;
&lt;p&gt;Now, in the failing case, the IPv6 connection attempt succeeds, even
though there is no server bound to that port.  As a result, the client
part is happily connected to a non-existing service, and the server part
hangs forever waiting for the connection to come.&lt;/p&gt;
&lt;p&gt;I have attempted to reproduce this with an isolated test case,
reproducing the use of threads, binding to port zero, the IPv4/IPv6
mixup and I simply haven&apos;t been able to reproduce this.  However,
curiously enough my test case actually &lt;em&gt;fixes&lt;/em&gt; the problem.  I mean, if I
start my test case before LLDB unit tests, they work fine afterwards
(until next reboot).&lt;/p&gt;
&lt;p&gt;Being unable to make any further progress on this weird behavior, I&apos;ve
decided to fix the test design instead &#8212; and make it connect to the same
address it binds to:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/f6e5594e811c70986ad8af3aa3f9540fcb7a1149&quot;&gt;r353868&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;getting-the-right-toolchain-for-live-testing&quot;&gt;
&lt;h2&gt;Getting the right toolchain for live testing&lt;/h2&gt;
&lt;p&gt;The largest problem so far was getting LLDB tests to interoperate with
NetBSD&apos;s clang driver correctly.  On other systems, clang either
defaults to libstdc++, or has libc++ installed as part of the system
(FreeBSD, Darwin).  The NetBSD driver wants to use libc++
but we do not have it installed by default.&lt;/p&gt;
&lt;p&gt;While this could be solved via installing libc++ on the buildbot host,
I thought it would be better to establish a solution that would allow
LLDB to use just-built clang &#8212; similarly to how other LLVM projects
(such as OpenMP) do.  This way, we would be testing the matching libc++
revision and users would be able to run the tests in a single checkout
out of the box.&lt;/p&gt;
&lt;p&gt;Sadly, this is non-trivial.  While it could be all hacked into
the driver itself, it does not really belong there.  While it is
reasonable to link tests into the build tree, we wouldn&apos;t want regular
executables built by user to bind to it.  This is why normally this is
handled via the test system.  However, the tests in LLDB are
an accumulation of at least three different test systems, each one calling
the compiler separately.&lt;/p&gt;
&lt;p&gt;In order to establish a baseline for this, I have created wrappers for
clang that added the necessary command-line options.  The state-of-art
wrapper for clang looked like the following:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;#!/usr/bin/env bash

topdir=/home/mgorny/llvm-project/build-rel-master
cxxinc=&amp;quot;-cxx-isystem $topdir/include/c++/v1&amp;quot;
lpath=&amp;quot;-L $topdir/lib&amp;quot;
rpath=&amp;quot;-Wl,-rpath,$topdir/lib&amp;quot;
pthread=&amp;quot;-pthread&amp;quot;
libs=&amp;quot;-lunwind&amp;quot;

# needed to handle &apos;clang -v&apos; correctly
[ $# -eq 1 ] &amp;amp;&amp;amp; [ &amp;quot;$1&amp;quot; = -v ] &amp;amp;&amp;amp; exec $topdir/bin/clang-9-real &amp;quot;$&amp;#64;&amp;quot;
exec $topdir/bin/clang-9-real $cxxinc $lpath $rpath &amp;quot;$&amp;#64;&amp;quot; $pthread $libs&lt;/pre&gt;
&lt;p&gt;The actual executable I renamed to &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;clang-9-real&lt;/span&gt;&lt;/span&gt;, and this wrapper
replaced &lt;span class=&quot;docutils literal&quot;&gt;clang&lt;/span&gt; and a similar one replaced &lt;span class=&quot;docutils literal&quot;&gt;clang++&lt;/span&gt;.  &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;clang-cl&lt;/span&gt;&lt;/span&gt;
was linked to the real executable (as it wasn&apos;t
called in wrapper-relevant contexts), while &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;clang-9&lt;/span&gt;&lt;/span&gt; was linked
to the wrapper.&lt;/p&gt;
&lt;p&gt;After establishing a baseline of working tests, I&apos;ve looked into
migrating the necessary bits one by one to the driver and/or LLDB test
system, removing the migrated parts and verifying whether tests pass
the same.&lt;/p&gt;
&lt;p&gt;My proposal so far involves, appropriately:&lt;/p&gt;
&lt;ol class=&quot;arabic simple&quot;&gt;
&lt;li&gt;&lt;p&gt;Replacing &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-cxx-isystem&lt;/span&gt;&lt;/span&gt; with libc++ header search using path
relative the compiler executable:
&lt;a class=&quot;reference external&quot; href=&quot;https://reviews.llvm.org/D58592&quot;&gt;D58592&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrating &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-L&lt;/span&gt;&lt;/span&gt; and &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-Wl,-rpath&lt;/span&gt;&lt;/span&gt; with the LLDB test system:
&lt;a class=&quot;reference external&quot; href=&quot;https://reviews.llvm.org/D58630&quot;&gt;D58630&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding NetBSD to list of platforms needing &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-pthread&lt;/span&gt;&lt;/span&gt;:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/c10a8848734898970a216aa6d4fd453fe05ae606&quot;&gt;r355274&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The need for &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-lunwind&lt;/span&gt;&lt;/span&gt; is solved via switching the test failing
due to the lack of it to use libc++ instead of libstdc++:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/8085c1b3c1c93b5027b8dd611733d1e1ab68c4ab&quot;&gt;r355273&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The reason for adjusting libc++ header search in the driver rather than
in LLDB tests is that the path is specific to building against libc++,
and the driver makes it convenient to adjust the path conditionally
to standard C++ library being used.  In other words, it saves us from
hard-relying on the assumption that tests will be run against libc++
only.&lt;/p&gt;
&lt;p&gt;I&apos;ve went for integrating &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-L&lt;/span&gt;&lt;/span&gt; in the test system since we do not want
to link arbitrary programs to the libraries in LLVM&apos;s build directory.
Appending this path unconditionally should be otherwise harmless to
LLDB&apos;s tests, so that is the easier way to go.&lt;/p&gt;
&lt;p&gt;Originally I wanted to avoid appending RPATHs.  However, it seems that
the &lt;span class=&quot;docutils literal&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt; solution that works for Linux does not reliably
work on NetBSD with LLDB.  Therefore, passing &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-Wl,-rpath&lt;/span&gt;&lt;/span&gt; along with
&lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-L&lt;/span&gt;&lt;/span&gt; allowed me to solve the problem simpler.&lt;/p&gt;
&lt;p&gt;Furthermore, those design solutions match other LLVM projects.  I&apos;ve
mentioned OpenMP before &#8212; so far we had to pass &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-cxx-isystem&lt;/span&gt;&lt;/span&gt; to its
tests explicitly but it passed &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-L&lt;/span&gt;&lt;/span&gt; for us.  Those patches render
passing &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-cxx-isystem&lt;/span&gt;&lt;/span&gt; unnecessary, and therefore make LLDB follow
the suit of OpenMP.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;finishing-touches&quot;&gt;
&lt;h2&gt;Finishing touches&lt;/h2&gt;
&lt;p&gt;Having a reasonably working compiler and major regressions fixed, I have
focused on establishing a baseline for running tests.  The goal is to
mark broken tests XFAIL or skip them.  With all tests marked
appropriately, we would be able to start running tests on the buildbot
and catch regressions compared to this baseline.  The current progress
on this can be see in &lt;a class=&quot;reference external&quot; href=&quot;https://reviews.llvm.org/D58527&quot;&gt;D58527&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sadly, besides failing tests there is still a small number of flaky
or hanging tests which are non-trivial to detect.  The upstream
maintainer, Pavel Labath is very helpful and I hope to be able to
finally get all the flaky tests either fixed or covered with his help.&lt;/p&gt;
&lt;p&gt;Other fixes not worth a separate section include:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;p&gt;fixing compiler warnings about empty format strings:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/42d9cd2d350df895f2e78de9a134a26526cc86cb&quot;&gt;r354922&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;fixing two &lt;span class=&quot;docutils literal&quot;&gt;dlopen()&lt;/span&gt; based test cases not to link &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-ldl&lt;/span&gt;&lt;/span&gt;
on NetBSD:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/65ebfaf0bee85a563b3f88da9ba1108cc3b032fd&quot;&gt;r354617&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;finishing Kamil&apos;s patch for core file support: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/4f134fb66019d948d1f68d62a92f2a01b22eb7ee&quot;&gt;r354466&lt;/a&gt;,
followup fix in &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/880b38d0bd854af8897f4fffd2bd5c3a19e3d271&quot;&gt;r354483&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;removing dead code in main loop:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/257fcd9b17119455a02f965b95200a286435e942&quot;&gt;r354050&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;fixing stand-alone builds after they&apos;ve been switched to
LLVMConfig.cmake:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/e47f89cb2cba7f6441b851ac43a22d989ce5bb51&quot;&gt;r353925&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;skipping lldb-mi tests when Python support (needed by lldb-mi) is disabled:
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/8780771c51d6ced4998d24f71f75bc6c6e7d2acc&quot;&gt;r353700&lt;/a&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;fixing incorrect initialization of &lt;em&gt;sigset_t&lt;/em&gt; (not actually used right
now): &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-project/commit/f048d448e0f58ff6b3e5d09cbdc91fc1c97afdc0&quot;&gt;r353675&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;buildbot-updates&quot;&gt;
&lt;h2&gt;Buildbot updates&lt;/h2&gt;
&lt;p&gt;The last part worth mentioning is that the NetBSD LLVM buildbot has seen
some changes.  Notably, zorg &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/llvm/llvm-zorg/commit/c9b663d22ff703fb45e1bde658d1ae4378902b5c&quot;&gt;r354820&lt;/a&gt;
included:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;p&gt;fixing the bot commit filtering to include all projects built,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;renaming the bot to shorter &lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;netbsd-amd64&lt;/span&gt;&lt;/span&gt;,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;and moving it to &lt;span class=&quot;docutils literal&quot;&gt;toolchain&lt;/span&gt; category.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the most useful functions of buildbot is that it associated every
successive build with new commits.  If the build fails, it blames
the authors of those commits and reports the failure to them.  However,
for this to work buildbot needs to be aware which projects are being
tested.&lt;/p&gt;
&lt;p&gt;Our buildbot configuration has been initially based on one used for
LLDB, and it assumed LLVM, Clang and LLDB are the only projects built
and tested.  Over time, we&apos;ve added additional projects but we failed to
update the buildbot configs appropriately.  Finally, with the help of
Jonas Hahnfeld, Pavel Labath and Galina Kistanova we&apos;ve managed to
update the list and make the bot blame all projects correctly.&lt;/p&gt;
&lt;p&gt;While at it, we were suggested to rename the bot.  The previous name was
&lt;span class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;lldb-amd64-ninja-netbsd8&lt;/span&gt;&lt;/span&gt;, and others suggested that the developers
may ignore failures in other projects seeing &lt;span class=&quot;docutils literal&quot;&gt;lldb&lt;/span&gt; there.  Kamil
Rytarowski also pointed out that the version number confuses users to
believe that we&apos;re running separate bots for different versions.
The new name and category mean to clearly indicate that we&apos;re running
a single bot instance for multiple projects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;quick-summary-and-future-plans&quot;&gt;
&lt;h2&gt;Quick summary and future plans&lt;/h2&gt;
&lt;p&gt;At this point, the most important regressions in LLDB have been fixed
and it is able to debug simple programs on amd64 once again.  The test
suite patches are still waiting for review, and once they&apos;re approved I
still need to work on flaky tests before we can reliably enable that
on the buildbot.  This is the first priority.&lt;/p&gt;
&lt;p&gt;The next item on the TODO list is to take over and finish &lt;a class=&quot;reference external&quot; href=&quot;https://reviews.llvm.org/D32149&quot;&gt;Kamil&apos;s patch
for core files with thread&lt;/a&gt;.  Most
notably, the patch requires writing tests, and verifying whether there
are no new bugs affecting it.&lt;/p&gt;
&lt;p&gt;On a semi-related note, LLVM 8.0.0 will be released in a few days
and I will be probably working on updating src to the new version.
I will also try to convince Joerg to switch from unmaintained libcxxrt
to upstream libc++abi.  Kamil also wanted to change libc++ include path
to match upstream (NetBSD is dropping &lt;span class=&quot;docutils literal&quot;&gt;/v1&lt;/span&gt; suffix at the moment).&lt;/p&gt;
&lt;p&gt;Once this is done, the next big step is to fix threading support.
Testing on non-amd64 arches is deferred until I gain access to some
hardware.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;this-work-is-sponsored-by-the-netbsd-foundation&quot;&gt;
&lt;h2&gt;This work is sponsored by The NetBSD Foundation&lt;/h2&gt;
&lt;p&gt;The NetBSD Foundation is a non-profit organization and welcomes any
donations to help us continue funding projects and services
to the open-source community. Please consider visiting the following URL
to chip in what you can:&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;http://netbsd.org/donations/#how-to-donate&quot;&gt;http://netbsd.org/donations/#how-to-donate&lt;/a&gt;&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/the_netbsd_foundation_participating_in</id>
        <title type="html">The NetBSD Foundation participating in Google Summer of Code 2019</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/the_netbsd_foundation_participating_in"/>
        <published>2019-02-27T16:34:42+00:00</published>
        <updated>2019-02-27T16:34:42+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;//www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&apos; style=&quot;width: 80px; height: 80px; float: right;&quot; /&gt;&lt;/a&gt;
For the 4th year in a row and for the 13th time &lt;a
href=&quot;https://summerofcode.withgoogle.com/organizations/5919342647050240/&quot;&gt;The NetBSD Foundation&lt;/a&gt;
will participate in
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code 2019&lt;/a&gt;!
&lt;/p&gt;

&lt;p&gt;
If you are a student and would like to learn more about Google
Summer of Code please go to the
&lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google Summer of Code&lt;/a&gt;
homepage.
&lt;/p&gt;

&lt;p&gt;
You can find a list of projects in
&lt;a href=&quot;https://wiki.NetBSD.org/projects/gsoc/&quot;&gt;Google Summer of Code
project proposals&lt;/a&gt; in the &lt;a href=&quot;https://wiki.NetBSD.org/&quot;&gt;wiki&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Do not hesitate to get in touch with us via &lt;a
href=&quot;ircs://chat.freenode.net:6697/#netbsd-code&quot;&gt;#netbsd-code&lt;/a&gt; IRC channel
on &lt;a href=&quot;https://freenode.net/&quot;&gt;Freenode&lt;/a&gt; and via
&lt;a href=&quot;https://www.NetBSD.org/mailinglists/&quot;&gt;NetBSD mailing lists&lt;/a&gt;!
&lt;/p&gt;

&lt;p&gt;
Looking forward to have a great summer!
&lt;/p&gt;
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code</id>
        <title type="html">Announcing Google Summer of Code 2018 projects</title>
        <author><name>Leonardo Taccari</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/announcing_google_summer_of_code"/>
        <published>2018-05-01T10:15:52+00:00</published>
        <updated>2018-05-01T10:15:52+00:00</updated> 
        <category term="/General" label="General" />
        <category term="summerofcode" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc2018" scheme="http://roller.apache.org/ns/tags/" />
        <summary type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;//www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&apos; style=&quot;width: 80px; height: 80px; float: right;&quot; /&gt;&lt;/a&gt;
We are very happy to announce
&lt;a href=&apos;https://summerofcode.withgoogle.com/organizations/6559863631511552/&apos;&gt;
The NetBSD Foundation Google Summer of Code 2018 projects&lt;/a&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Harsh Khatore - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#4535962579763200&apos;&gt;Modern cryptographic algorithms to netpgp, netpgpverify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nizar Benshaqi - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5611080471019520&apos;&gt;SQL Database for ATF tests results with online query and statistics page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Marwa Desouky - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5844214449963008&apos;&gt;Tickless Kernel with high-resolution timers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Harry Pantazis - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5908322608218112&apos;&gt;Kernel Undefined Behavior SANitizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Does025 - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6179441747689472&apos;&gt;Porting FreeBSD Atheros driver to NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Saad Mahmood - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6292399387574272&apos;&gt;Machine-independent EFI bootloader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Yang Zheng - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6417656001855488&apos;&gt;Integrate libFuzzer With the Basesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Keivan Motavalli - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6485310259593216&apos;&gt;configuration files versioning in pkgsrc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;R3x - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6738600452947968&apos;&gt;Implementing Kernel Address Sanitizer (KASan) in the NetBSD kernel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
        <content type="html">&lt;p&gt;
&lt;a href=&apos;https://summerofcode.withgoogle.com/&apos;&gt;&lt;img alt=&quot;Google Summer of Code logo&quot; src=&apos;//www.NetBSD.org/~leot/blog-posts/imgs/GSoC-icon-192.png&apos; style=&quot;width: 80px; height: 80px; float: right;&quot; /&gt;&lt;/a&gt;
We are very happy to announce
&lt;a href=&apos;https://summerofcode.withgoogle.com/organizations/6559863631511552/&apos;&gt;
The NetBSD Foundation Google Summer of Code 2018 projects&lt;/a&gt;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Harsh Khatore - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#4535962579763200&apos;&gt;Modern cryptographic algorithms to netpgp, netpgpverify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nizar Benshaqi - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5611080471019520&apos;&gt;SQL Database for ATF tests results with online query and statistics page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Marwa Desouky - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5844214449963008&apos;&gt;Tickless Kernel with high-resolution timers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Harry Pantazis - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#5908322608218112&apos;&gt;Kernel Undefined Behavior SANitizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Does025 - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6179441747689472&apos;&gt;Porting FreeBSD Atheros driver to NetBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Saad Mahmood - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6292399387574272&apos;&gt;Machine-independent EFI bootloader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Yang Zheng - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6417656001855488&apos;&gt;Integrate libFuzzer With the Basesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Keivan Motavalli - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6485310259593216&apos;&gt;configuration files versioning in pkgsrc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;R3x - &lt;a href=&apos;https://summerofcode.withgoogle.com/projects/#6738600452947968&apos;&gt;Implementing Kernel Address Sanitizer (KASan) in the NetBSD kernel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
We have started the community bonding period where students get in touch with
mentors and community and get more confident with documentation and the code
base.
The coding period will start from May 14 until August 6.
&lt;/p&gt;

&lt;p&gt;
Please welcome all our students and a big good luck to students and mentors!
&lt;/p&gt;

&lt;p&gt;
A big thank you also to &lt;a href=&apos;https://www.google.com&apos;&gt;Google&lt;/a&gt; and The
NetBSD Foundation Organization Administrators!
&lt;/p&gt;

&lt;p&gt;
Looking forward to a nice Google Summer of Code!
&lt;/p&gt;</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/google_summer_of_code_2017</id>
        <title type="html">Google Summer of Code 2017</title>
        <author><name>Thomas Klausner</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/google_summer_of_code_2017"/>
        <published>2017-10-18T16:43:40+00:00</published>
        <updated>2017-10-18T16:43:40+00:00</updated> 
        <category term="/General" label="General" />
        <category term="gsoc2017" scheme="http://roller.apache.org/ns/tags/" />
        <category term="summerofcode" scheme="http://roller.apache.org/ns/tags/" />
        <category term="google" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">NetBSD participated in the 2017 edition of &lt;a href=&quot;https://summerofcode.withgoogle.com/&quot;&gt;Google of Summer of Code&lt;/a&gt; with 3 students.

All of the students finished their projects successfully. The following links report about their activities:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.netbsd.org/tnf/entry/gsoc_2017_reports_add_code&quot;&gt;Leonardo Taccari: Add multi-packages support to pkgsrc&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://coypu.sdf.org/2017-08-29-LFS&quot;&gt;Maya Rashish: LFS cleanup&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;https://bumblebeesky.tumblr.com/&quot;&gt;Utkarsh Anand: Make Anita support multiple virtual machine systems&lt;/a&gt;
&lt;/ul&gt;

Congratulations to the students for finishing their projects successfully, and thanks to Google for sponsoring!
</content>
    </entry>
    <entry>
        <id>https://blog.netbsd.org/tnf/entry/announcing_netbsd_and_the_google</id>
        <title type="html">Announcing NetBSD and the Google Summer of Code Projects 2017</title>
        <author><name>Hubert Feyrer</name></author>
        <link rel="alternate" type="text/html" href="https://blog.netbsd.org/tnf/entry/announcing_netbsd_and_the_google"/>
        <published>2017-05-05T19:16:02+00:00</published>
        <updated>2017-05-05T19:16:02+00:00</updated> 
        <category term="/General" label="General" />
        <category term="google" scheme="http://roller.apache.org/ns/tags/" />
        <category term="summerofcode" scheme="http://roller.apache.org/ns/tags/" />
        <category term="gsoc2017" scheme="http://roller.apache.org/ns/tags/" />
        <content type="html">We are very happy to announce that the selection process in this year&apos;s Summer of Code with its bargaining of slots and what student gets assigned to which project is over. As a result, the following students will take on their projects:
&lt;p&gt;

&lt;ul&gt;
&lt;li&gt; Leonardo Taccari will work add multi-packages support to pkgsrc.
&lt;li&gt; Maya Rashish will work on the LFS cleanup.
&lt;li&gt; Utkarsh Anand will make Anita support multiple virtual machine systems and more architectures within them to improve testing coverage.
&lt;/ul&gt;

What follows now is a community bonding period until May 30th, followed by a coding period over the summer (it&apos;s Summer of Code, after all &lt;img src=&quot;https://blog.netbsd.org/images/smileys/smile.gif&quot; class=&quot;smiley&quot; alt=&quot;:-)&quot; title=&quot;:-)&quot; /&gt;) until August 21st, evaluations, code submission and an announcement of the results on September 6th 2017.
&lt;p&gt;

Good luck to all our students and their mentors - we look forward to your work results, and welcome you to The NetBSD Project!
&lt;p&gt;
</content>
    </entry>
</feed>

