Keep OSNews alive by becoming a Patreon, by donating through Ko-Fi, or by buying merch!

General Development Archive

How to create a Qt 5 ARM/Intel universal binary for Mac

I recently released a big update for my Mac ROM SIMM Programmer software which is written using Qt for cross-platform compatibility. As part of the update I wanted to release the Mac build as a universal x86_64/arm64 binary so that M1/M2 Mac users would be able to run it natively. It doesn’t currently compile for Qt 6, although I think I can fix that in the future without too much effort. However, Qt 5.15.9 and later do support creating universal binaries out of the box, so I decided to figure out how to set it all up. Even though I think I have pretty decent Google-fu, it was difficult to piece everything together to accomplish this goal. I’m hoping this post can serve as a reference for people in the future. These instructions are based on Qt 5.15.10 because that is the latest version that is currently open source. I did this on an M2 Mac Mini running macOS 13.5.1 Ventura. Useful information for those that need it. I’m not one of those, but I’m sure some of you are.

Backward compatibility, Go 1.21, and Go 2

That raises an obvious question: when should we expect the Go 2 specification that breaks old Go 1 programs? The answer is never. Go 2, in the sense of breaking with the past and no longer compiling old programs, is never going to happen. Go 2 in the sense of being the major revision of Go 1 we started toward in 2017 has already happened. There will not be a Go 2 that breaks Go 1 programs. Instead, we are going to double down on compatibility, which is far more valuable than any possible break with the past. In fact, we believe that prioritizing compatibility was the most important design decision we made for Go 1. I’m not well-versed enough in either programming or the Go programming language, but this seems like good news for Go programmers.

I have written a JVM in Rust

Lately I’ve been spending quite a bit of time learning Rust, and as any sane person would do, after writing a few 100 lines programs I’ve decided to take on something a little bit more ambitious: I have written a Java Virtual Machine in Rust. With a lot of originality, I have called it rjvm. The code is available on GitHub. I want to stress that this is a toy JVM, built for learning purposes and not a serious implementation. Toy or not, this is ambitious and impressive.

Lotus 1-2-3 and arbitrary terminal sizes

Using Lotus 1-2-3 in today’s world is a bit of a challenge. The truth is I’m cheating, it does work, but it only supports a few standard text mode resolutions. If your terminal is not exactly 80 columns wide, it just makes a big ugly mess on your screen. There’s a workaround, just type stty cols 80, and it will be confined to a portion of your terminal, looking a bit sad. There is no way to display more columns, and maximizing your terminal will do nothing. …or is there? After a lot of research, reverse-engineering, and hard work, Tavis Ormandy managed to get Lotus 1-2-3 to respect any arbitrary terminal size. Bonkers work.

COBOL: You’re thinking about it wrong

And while headlines might indicate the language had fallen into disfavor, the amount of COBOL in use continues to grow, with 800 billion lines running in production systems daily, according to a global survey conducted last year by enterprise software firm Micro Focus. COBOL is considered strategic by 92% of survey respondents, and over half said they expect their organizations to keep running their COBOL applications for at least another 10 years.  I feel like COBOL is one of those things that can guarantee you a career. If you know COBOL, you will most likely find a job and have a good career future, but it’s probably not going to be anything sexy or anything that has the (albeit tiny) opportunity of making you filthy rich – but you won’t ever be without a job for long either.

Exploring Rust for Vulkan drivers

I don’t expect to see any actual Mesa Vulkan drivers in Rust for a few years yet. My current goal is merely to explore the possibility. When the time comes that someone does choose to write a Vulkan driver in Rust, I want us to be ready. This exploration may also be useful for informing the Rust community about language features which would make the task easier. Converting existing Vulkan drivers to Rust is an explicit non-goal at this time. Rust seems everywhere.

GNU Make to drop support for OS/2, AmigaOS, Xenix

GNU Make 4.4 is here, and it has some interesting – and sad – news for some of the old operating systems we still cover on OSNews. Sadly, support for OS/2 (EMX), AmigaOS, Xenix, and Cray will be dropped from the next release of Make. Now, I’m not entirely sure just how many users of these operating systems even use Make, but for those of you that do – tough cookie right here.

When life gives you lemons, write better error messages

Error messages are part of our daily lives online. Every time a server is down or we don’t have internet, or we forget to add some info in a form, we get an error message. “Something went wrong” is the classic. But what went wrong? What happened? And, most importantly, how can I fix it? I really enjoyed this article detailing a massive project at Wix to go through and rephrase every single error message to make them easier to parse and overall less… Useless. A lot of developers can learn from this article.

How I hacked my car

The IVI in the car, like many things these days, is just a computer. My goal was to hack the IVI to get root access and hopefully be able to run my own software on it. Of course, the first step in hacking a device like this is research. This is a story full of twits and turns, and some rally questionable decisions by Hyundai’s developers.

Carbon, a new programming language from Google, aims to be C++ successor

Carbon, the latest programming language to be built within Google, was unveiled today as an experimental successor to C++. To that end, while Carbon has many of the same goals as Rust, such as helping developers to create “performance-critical software,” Carbon is also intended to be fully interoperable with existing C++ code. Additionally, the goal is to make migrating from C++ to Carbon as easy as possible, if desired. This is not my area of expertise, so I’ll leave it to you readers to say more interesting things. The code for Carbon – not entirely sure about the name, but alright – is on github, along with more information.

What happened to Perl 7?

When we last heard from Perl, Perl 6 was going off on its own becoming Raku, Perl 5 was going to continue until version 5.36 which would serve as the basis for Perl NG, and Perl NG would be known as Perl 7 because Raku burned the Perl 6 namespace. No one saw the humor in “not that Perl 6, the other Perl 6”. Anyway, the Perl Steering Committee (PSC) decided to write a blog post about the future of Perl and Perl 7. The first PSC was elected in late 2020, and one of our first tasks was to create a plan for the future of Perl, and to put that in motion. A lot of discussion and iteration followed, but the strategy we agreed is: 1. Existing sensibly-written Perl 5 code should continue to run under future releases of Perl. Sometimes this won’t be possible, for example if a security bug requires a change that breaks backward compatibility. 2. We want to drive the language forwards, increasing the rate at which new features are introduced. This resulted in the introduction of the RFC process, which anyone can use to propose language changes. 3. We want to make it easy for people to use these new features, and want to do what we can to encourage their adoption. At some point in the future, the PSC may decide that the set of features, taken together, represent a big enough step forward to justify a new baseline for Perl. If that happens, then the version will be bumped to 7.0. So basically, nothing is going to change. Perl 5 will continue on into infinity adding features as it has been doing.

Are alternative app stores worth it?

App Store Optimization is, for most people, synonymous with Apple’s App Store and Google’s Play Store. After all, they contribute to 90% of the total available apps in the market. But they’re not the only ones out there. These alternative app stores seem to lurk in the shadows but each of them has its slew of users. With the looming DMA and Open Markets Acts that aim to open the app markets to third-party stores,  their time to shine may be just around the corner. Are they worth looking into? We’re investigating the topic. I’m actually quite surprised by these numbers. Of course, China has a whole slew of China-only application stores that are incredibly popular, but even outside of China, there’s quite a few application stores that seem to have found their niche, and doing well. If you’re a developer of certain applications, it might be worth it to check some of these more specialised application stores. And with the EU on the brink of cracking Apple’s stranglehold on iOS applications, we’re going to see an explosion of tailored application stores,

Ntfs2btrfs: convert NTFS to Btrfs

Ntfs2btrfs is a tool which does in-place conversion of Microsoft’s NTFS filesystem to the open-source filesystem Btrfs, much as btrfs-convert does for ext2. The original image is saved as a reflink copy at image/ntfs.img, and if you want to keep the conversion you can delete this to free up space. Neat tool, but probably with a rather limited application.

All desktop calculators are wrong, so I had to build my own

Writing this article wasn’t easy. At first glance, it’s all about a fairly unentertaining subject (building a calculator, the kind of exercise that every IT student tried at some point of its education), and to make the matter worse, it’s pedantically advertised. But in the end, I believe that this article really brings out valuable features, highlights enjoyable development stories, and offers an interesting experience, so bear with me! I built a desktop calculator called Chalk, which is free and supports macOS 10.9+. Because I had to make unconventional choices and introduce ideas that I never saw anywhere else before, my first task is to convince you that Chalk is more interesting than it looks. Alright, let’s see what the not-at-all critical and discerning OSNews readership thinks of this one.

Writing an OS in Rust

This blog series creates a small operating system in the Rust programming language. Each post is a small tutorial and includes all needed code, so you can follow along if you like. The source code is also available in the corresponding Github repository. A great way to learn Rust.

Rust-written replacement to GNU Coreutils progressing, some binaries now faster

Along with the broader industry trend of transitioning security-sensitive code to memory-safe languages like Rust, there has been an effort to write a Rust-based replacement to GNU Coreutils. For nearly a year that Rust Coreutils has been able to run a basic Debian system while more recently they have been increasing their level of GNU Coreutils compatibility and in some cases now even outperforming the upstream project. For someone like me, who isn’t a programmer, it’s difficult to really say anything meaningful when it comes to the pros and cons of individual programming languages, but on the face of it, with my limited understanding, modern languages like Rust do seem like a safer, more modern, more robust choice.