Winamp A Few Days Later: You Can Fork, And Watch For GPL Violations

A few days ago the source code for the popular Winamp music player was released into the world, with as we reported at the time, a licence that left a lot to be desired. Since then it seems some of the criticism has caught up with the company, for not only have they modified their terms to allow forking, they’ve reacted to a bunch of claimed GPL violations by removing offending files. Perhaps How-To-Geek are right in describing it all as an absolute mess.

The forking amendment means that with luck we’ll start seeing a few modified players descending from the Winamp code, and it seems that the GPL violations are more embarrassing technicalities than show-stoppers, but we have to wornder whether or not this makes for something with any more than historical interest. Perhaps its value stands in a lesson for corporate entities in how not to release their source, which sadly we expect will be taken by other organisations as an excuse not to do so.

If you’re following the Winamp source code saga you can read our coverage from when it came out. It will be interesting to see where this story goes.

Learn GPU Programming With Simple Puzzles

Have you wanted to get into GPU programming with CUDA but found the usual textbooks and guides a bit too intense? Well, help is at hand in the form of a series of increasingly difficult programming ‘puzzles’ created by [Sasha Rush]. The first part of the simplification is to utilise the excellent NUMBA python JIT compiler to allow easy-to-understand code to be deployed as GPU machine code. Working on these puzzles is even easier if you use this linked Google Colab as your programming environment, launching you straight into a Jupyter notebook with the puzzles laid out. You can use your own GPU if you have one, but that’s not detailed.

The puzzles start, assuming you know nothing at all about GPU programming, which is totally the case for some of us! What’s really nice is the way the result of the program operation is displayed, showing graphically how data are read and written to the input and output arrays you’re working with. Each essential concept for CUDA programming is identified one at a time with a real programming example, making it a breeze to follow along. Just make sure you don’t watch the video below all the way through the first time, as in it [Sasha] explains all the solutions!

Confused about why you’d want to do this? Then perhaps check out our guide to CUDA first. We know what you’re thinking: how do we use non-nVIDIA hardware? Well, there’s SCALE for that! Finally, once you understand CUDA, why not have a play with WebGPU?

Continue reading “Learn GPU Programming With Simple Puzzles”

Winamp Releases Source Code, But Is It Really Open?

The 1990s seem to have reached that point at which they are once more considered cool, and ephemera of the decade has become sought-after. One of the unlikely software hits from the period was Winamp, the MP3 player of choice in an era when time spent on dodgy file sharing sites or peer to peer sharing would snag you almost any music you wanted. Decades later its interface is still widely copied, but now you can try the original again as its source code has been made available. It’s not what we’d call open source though, even though they seem to be making an effort to imply as much with phrases such as “opening up its source code“.

If you’d like to have a go with it you can snag a copy from this GitHub repository, and you’ll need a particular version of Visual Studio 2019 to build it. Any celebrations will be muted though by paragraph five of the Winamp Collaborative License, which prohibits distribution of modified versions or forks, and stipulates that only the official maintainers can distribute it. This doesn’t sound like open source to us, indeed it seems they’re just looking for community maintenance for free, which probably isn’t too surprising from a brand which went all-out to join the NFT bandwagon a couple of years ago.

So have a look for nostalgia’s sake if you want, but we’d suggest going for something more community driven if you want to do anything with it.

Header: Christiaan Colen, CC BY-SA 2.0.

Revisiting 1990’s Mac Games That Never Were

[John Calhoun] was digging around their old MAC hard drives, revisiting some abandoned shareware games they wrote over three decades ago, and has uploaded the recovered disk images to GitHub for everyone to take apart and play with. This repository has a few of the games complete with their development files and the compiler environment, a mixture of Think Pascal and C.

Back then, [John] had a solid mantra when creating projects, specifically prototyping fast and abandoning things quickly if they were not working out. The blog shows a list of twenty-eight projects, of which only five ever made it to release, with all the rest left to rot. This is reminiscent of the attitude around Silicon Valley of moving fast and breaking things. Anyway, reasons for ditching a project ranged from ‘too much sprite work’ for a D’n’D style game to simply ‘not fun’ for some with clunky control mechanisms. [John] even abandoned a neat-looking steampunk flight simulator due to the sheer amount of work needed. Of course, it’s not all lost effort. Much of the code written was reused across multiple projects; after all, there’s no point in re-writing a cosine lookup table if you’ve already got one kicking around in another project.

Still, it’s a fun trip down memory lane, looking deep into projects that never were and the development journey to becoming a successful programmer.

While it isn’t hard to find old Macintosh hardware, some are not in great shape. Here’s a fun Hackintosh project that uses retro parts. [John] was featured a while back, with his homage to his first mac, a sleek Rpi-powered eInk desk ornament. Finally, we can’t talk about recovering retro software without looking in detail at the floppy disk themselves.

FreeCAD Is Near 1.0

The open-source parametric 3D modelling software, FreeCAD, is out in a release candidate for version 1.0.  If you’ve tried FreeCAD before and found a few showstoppers, it might be a good time for you to test it out again because the two biggest of them have been solved in this latest version.

First, version 1.0 finally implements a solution to the “topological naming problem”. Imagine you want to put a hole into a surface. The program needs to know on which surface to put the hole, and so it refers to this surface by name / number. Now imagine you subdivide the surface, and both subsections get new names. Where does your hole go now?  If you want to dig into the issue, the inimitable [MangoJelly] has a great video about the topo naming problem. Practically, there were workarounds, like only adding chamfers after the main design has stabilized, but frankly it was a hassle to remember all of the tricks. This is a huge fix.

The second big fix concerns assemblies.  Older versions of FreeCAD were great for making single parts, but combining them all together inside the CAD program was always janky.  Version 1.0 combines the previous two patchwork assembly workbenches into one, and it’s altogether more pleasant to use. The constraints of how two parts move when held together with an axle just works now, and this is a big deal for multi-part models.

If you’re coming from any other parametric CAD program, most of FreeCAD will seem familiar to you, but there will also be workflow differences that will take some getting used to. In trade, what do you get? Scriptability in Python, real open source software, and all of the bells and whistles for free. Now that its two biggest pain points have been addressed,  FreeCAD has become a lot easier to love. We’re looking forward to some good V1.0 tutorials in the future, and we’ll keep you posted when we find them.

Get Your Lisp On With The Dune Shell

Lisp is one of those programming languages that seems to keep taunting us for not learning it properly. It is still used for teaching functional languages today. [Adam McDaniel] has an obvious fondness for this fifty-year-old language and has used it in several projects, including their own shell, Dune.

Dune is a shell designed for powerful scripting. Think of it as an unholy combination of bash and Lisp.

Dune is designed to be highly customisable, allowing you to create a super-optimised workstation for your admin and programming tasks. [Adam] describes the front end for Dune as having turned up the cosiness dial to eleven, and we can see that. A cosy home is personalised, and Dune lets you customise everything.

Dune is a useable functional programming environment with a reasonably complete standard library to back it up, which should simplify some of the more complicated sysadmin tasks. [Adam] says the language also supports a few metaprogramming concepts, such as a quote operator, operator overloading, and macro programming. It’s difficult to describe much more about what you can do with Dune, as it’s a general-purpose programming language wrapped in a shell. The possibilities are endless, and [Adam] is looking forward to seeing what you lot out there do with his project!

The shell can be personalised by editing the prelude file, which allows you to overload functions for the prompt text, the incomplete prompt text (so you can implement intelligent completion options), and a function that deals with the formatting of the command response text. [Adam] gives us his personal prelude file, which defines many helper functions displaying useful things such as the current weather, a calendar, and an ASCII art cat. You never know when that might come in handy. This file is written in Lisp, so we reckon that’s where many people will start as they come up the Lisp (re)learning curve before embarking on more involved automation. Dune was written in Rust, so you need that infrastructure to install it with Cargo.

As we said earlier, Lisp is not a new language. We found a hack for porting a Lisp interpreter to any old language and also running Lisp bare metal on a Lisp machine. Finally, [Al] takes a look at some alternative shells.

Blowing Up Shell Scripts

One of the most universal experiences of any Linux or Unix user is working through a guide or handbook and coming across an almost unbelievably complex line of code meant to be executed with a shell. At the time of encountering a snippet like this it’s difficult to imagine any human ever having written it in the first place, but with some dedication it is possible to tease out what these small bits of code do when they’re typed into the terminal and run (unless it’s something like :(){ :|:& };: but that’s another story entirely). [noperator] recently built a tool which helps users in this predicament understand these shell scripts by expanding them into a more human-intelligible form.

The tool is named sol and does much more than expanding shell one-liners into a readable format. It also provides an interactive shell environment where the user can explore the exploded code in detail, modify it in any way they see fit, and collapse it back down to a single line so it can easily be sent to other users. It can be used with most of the major text editors as well as piped directly to standard input, and has a number of other options as well such as custom configurations and the ability to see non-standard bits of code that might not be compatible from one shell environment to another, as well as helping to translate those bits of code.

[noperator] has made the code available in the linked GitHub page for anyone curious about its use, and has a to-do list for future versions of the tool as well including adding support beyond bash. We’d definitely recommend a tool like this especially if you’re still relatively new to bash scripting (or shell scripting in general) and, as always, we’d just to remind everyone not to blindly copy and paste commands into their terminal windows. If you’re the type of person to go out on a limb and run crazy commands to see what they actually do, though, make sure you’re at least logged into the right computer first.