Haiku monthly activity report - 02/2019

Welcome to the activity report for February 2019. This month has been quite busy for me with the annual visit to FOSDEM (read the report), and managing the application process for both GSoC and Outreachy (Haiku has been accepted to both programs this year).

We are already seeing candidates applying to both GSoC and Outreachy, so expect to read about new names in the reports in the coming months and during the summer!

Anyway, let’s see what happened to the sourcecode while I was busy with this! This report covers hrev52828-hrev52944.

Media Kit

CodeForEvolution implemented BSound::Duration.

Barrett continues his work on improving the media kit, with various cleanup and initial work on support for DVD playback as well as improvements to the existing HTTP and RTSP streamers.

ELF loader

Waddlesplash completed the work on support for new format of initialization tables in ELF files. These tables are generated by the compiler and lets the OS know what needs to be initialized before the main() function can be called. The most basic ones are just clearing memory to 0, but sometimes, a global variable is set to a specific value, or a global or static C++ object is created, for example.

There are various ways for the compiler to list these, and mixing them together is a little tricky, as we require some initializations to happen after others.

This led to changes to the runtime_loader, but eventually led to more cleanups in other places, as the support code for this was also used in other unrelated code (to identify the object file some code was compiled in and locate matching resources, for example).

User interface

Rob Gill fixed the “autoraise” deskbar replicant, a little helper application that allows to raise windows to front automatically when using focus follows mouse.

He also fixed the icon size for ProcessController replicant.

Waddlesplash improved the interaction between scrollbars and layout system, allowing views to specify if they know how to handle scrolling themselves, in case the default behavior of scrolling 1 pixel at a time over a fixed range is not appropriate.

PulkoMandy fixed drawing of B_GRAY1 (monochrome) bitmaps, as part of his effort to implement a driver for old Apple StyleWriter printers which work with such bitmaps.

Zach Dykstra fixed the file information dialog in Tracker, which had truncated text.

Code cleanups

mt started continued his cleanup work, reviewing issues from the PVS studio scan we ran a few years ago, and fixing some of the problems found there. He is also working on cleaning up all ‘class-memaccess’ warnings, where we use memset on C++ objects.

Rob Gill joined the effort and also identified and fixed various other small issues in several parts of the codebase.

Some Coverity issues were fixed by puckipedia, as well.

PulkoMandy made WebPositive abort cleanly with an error message if SSE2 is not available. Unfortunately, the current versions of WebKit really can’t be made to run without SSE2. Our users still runnning older CPUs can use NetSurf or other alternative web browsers.

Waddlesplash worked towards removing some of the multiple hash table implementations we have accumulated over the years (some being derivatives of each other).

Thanks to jscipione, the MIDI player will not crash when you drop a file on it while it’s already playing.

Storage and filesystems

The BFS resizing code developped during GSoC 2012 is finally getting some attention, with a few cleanup commits being merged this month. It does not result in anything usable yet, but at least the code is up for review on Gerrit now.

The more recent code for the SD/MMC drivers from GSoC 2018 is also being worked on, the issue that was left pending at the end of GSoC was fixed, allowing the bus driver to work and identify SD cards, now the work on the actual mass storage driver remains.

korli fixed issues in the exfat driver that would lead to crashes on large drives (2TB or more). There are still some issues but at least it won’t bring the whole system down.

As part of the code cleanups mentionned above, btrfs, bfs and ext2 all got some fixes to avoid crashes in unexpected situations.

Fabiano Fidêncio modified our build scripts to make sure our ISO images have an useful ISO volume identifier, allowing them to be identified by GNOME and other Linux tools.

POSIX compatibility

korli improved the implementation of the posix_spawn function, which is a relatively recent addition to POSIX to fix the performance problems with the traditional way of starting a new application (fork() then exec()). The traditional way is to copy the current application, and then replace it with the one to execute. It is not so nice to copy something and erase it immediately afterwards. Note that BeOS already had a solution similar to posix_spawn, which we also implement, but posix_spawn is a more flexible function, allowing to control various aspects (session IDs, file descriptors inheritance, etc).

Applications and tools

SerialConnect now has a larger scrollback, allowing for example to see the complete output from Haiku serial logs on another machine.

Rob Gill also made several small fixes, such as preventing BootManager to offer installation to read-only drives, making printer preferences close with the usual alt+W shortcut, etc.

WebPositive got some attention as well, with an option to restore the previous session when opening, and a way to select the download folder using a BFilePanel. Thanks to Rob Gill, humdinger and for working on this together!

Yatendra Singh made it possible to autostart LaunchBox on boot.

Bootstrap and new ports

kallisti5 and PulkoMandy have been working on bootstrapping Haiku on RISC-V and SPARC hardware, respectively. These ports were started because the ARM port is currently having problems linking ICU, and we wanted to check if we would hit similar problems on other architectures.

The choice of these two was made for various reasons, including hardware availability (someone donated me a SPARC machine), availability of specifications (both are specified by open, independant entities and have multiple manufacturers implementing them), tool support (both have well maintained support in GCC), and personal interests of people doing the work.

The two new ports are not in an usable state yet, but they allow to once again review the whole bootstrap procedure and identify (or ideally, fix) any problem hit along the way.

USB support

Waddlesplash made several changes to the USB3 driver, to fix various issues on a wide set of hardware. The driver is now much more stable and compatible, however a few regressions have been spotted too. We encourage you to test USB3 support on nightlies from time to time and report bugs if you encounter some problems.

Video drivers

kallisti5 fixed a crash in the VESA driver when there is no video card. This allows to boot Haiku a bit further on Google Compute nodes. However, the app_server is in turn not so happy to not find a loaded video driver.

mmu_man made the VESA driver also disable screen scaling on NVidia hardware, so that the screen will use the native pixel size and have black borders around it, rather than using a blury and ugly scaling.