Starting an open source project

The free and open source software ecosystem is a rough, harsh place. Lots of initial work has to be put in to ensure your project is successful, the conditions need to be just right to get third-party contributions, and often you still need a thick skin to handle the conflicts that inevitably arise.

But as both those who contribute and those who maintain projects themselves know, it’s a labor of love. As a long-time supporter of many projects, I myself am willing to accept the risks and launch a new project of my own. I have been working on building a data-oriented game engine in C++11 for a few months now, and it has just recently seen a fully-fledged port to Rust. I thought I would share it with the world and have it be developed in the open.

Enter Amethyst. This is a work-in-progress game engine written in Rust that aims to be both data-oriented and data-driven, taking heavy inspiration from the industrial-strength Bitsquid engine (now called Autodesk Stingray). There are plans for an entity-component-system (ECS) architecture and a strong emphasis on modularity (e.g. multiple graphics API backends for the renderer, easy to bind to Lua/mruby/Python for scripting). Amethyst is in its early days yet, so don’t expect to be wowed. The most it can do now is transition between game states in a pushdown automaton design, and there is preliminary work being done on the renderer.

I have a few design documents up on the wiki, an unfinished online book, generated API documentation, a CONTRIBUTING file for people interested in helping out, and also a simple command-line client that can generate full-fledged game projects like this:

$ cargo install amethyst_tools
$ amethyst new mygame
$ cd mygame
$ amethyst run

I am also starting another blog called This Week in Amethyst on January 18th, 2016 that will detail the weekly changes and updates from the project as it evolves.

So what do you all think? Are you interested in helping out? Have you started an open source project and have some wisdom to share? Leave me a reply in the comments below.

Kali Linux: A better BackTrack?

Kali Linux 1.0 in action

BackTrack Linux was and still is reputedly one of the best security-oriented Live Linux distributions out there, for both offensive and defensive purposes. Packed with tools and affirmed by near-universal acclaim, the veteran BackTrack has seen a whopping 7+ years of active development and explosive community growth.

Originally based on a merger of two earlier established distros, the Slax-based WHAX (formerly Whoppix) and a Knoppix-based LiveCD named Auditor Security Collection, BackTrack saw a switch to an Ubuntu-based system during its later life, mostly to benefit from its Aptitude package management system and wide driver compatibility. But now, faced with an aging tool management architecture for its penetration testing tools, parent company Offensive Security wants to try something new.

Enter Kali Linux. First announced and finalized just a month ago in March 2013, Kali aims to be a complete restructuring and replacing of BackTrack from the software perspective while keeping the philosophy, community, penetration testing options, and even much of the branding intact.

Read more

Linux Kernel 3.1 has arrived!

Tux, the Linux mascotJust this morning, Linus Torvalds released the Linux kernel 3.1 into the mainline branch. This was merely a few days after Linux kernel 3.0 hit the Internet. Apparently the new version numbering scheme is doing its job well. Still this release has been relatively silent and without much fanfare, as neither Linus or have published any announcements or posted on their mailing list yet.


The current lack of publicity in this version does not mean that there is nothing nice in this new release. There have been a plethora of new improvements whipped up in this batch of the kernel. Here are a few highlights:

  1. Open source graphics driver improvements
    • This is an epic win for GNU/Linux! Notable GPU fixes and speedups include the buggy Ivy Bridge, Intel GMA 500, Nouveau, and ATI drivers, among others.
  2. Filesystem usage
  3. Dynamic Writeback Throttling
    •  “Writeback” is when programs copy data from RAM and write it to your hard disk. To keep busy programs from overwriting their own RAM data, “context throttling” comes in handy. Throttling is telling a process or two to not create any new data until the current data has been copied to disk (hint: think of a street crossing guard).
    • Unfortunately, the older writeback was not very mindful of the filesystem dutifully tidying up your hard disk, and would sometimes interfere with its cleanup work and corrupt its structure. The new writeback system can now intelligently check when the filesystem is busy and adjust its throttling habits accordingly, keeping your hard disk clean and boosting performance.
  4. OpenRISC support
    • Yay! OpenRISC is a project by the OpenCores organization aimed at creating a modern computing CPU platform based upon the classic RISC, fully licensed under the GNU LGPL License, and now Linux can boot on it. I’m not surprised, as Linux can be made to run on basically anything. 🙂
  5. Wiimote Controller support
    • Finally, the Wii remote works! The driver has been around for a while, but it has now been added to the official kernel repositories.

More Information

To see a full description of the new Linux kernel 3.1 fixes and improvements, I’d recommend you visit this page at It explains the rather cryptic changelog in a well-organized, plain English wiki page. Now, all that is left is to wait for Linux kernel version 3.2, which (unsurprisingly, given the new warp-speed version numbering scheme) is already in the works…

Honeyd: Your own virtual honeypot

Featured image: “DEFCON In Action #2” by Ambrosia Software

HoneyD Logo
Today, I will discuss a very interesting tool called Honeyd (pronounced “honey-dee” or “honey-daemon“). It is a powerful virtual honeypot tool written by Niels Provos and released as open source under the GNU General Public License v2.0, as part of the Honeynet Project. It runs on many Linux distributions and BSD’s.

A honeypot is a public or private computer that is intentionally left insecure, unpatched, without an anti-virus or firewall, etc. which encourages malicious hackers to attack it for behavioral analysis or for spamtrapping. This is a perfect tool for catching potential black-hat network intruders or spammers and monitoring their behavior. If you like, you can even build a massive open “playground”, giving any hacker (good or bad) a testbed to develop their skills and put their knowledge and techniques to the test without disrupting others.

If you have the cash, you can up multiple honeypots in your home or workplace, which act as convincing “decoy machines” that can help protect your legitimate computers from crackers. Networks like these are called honeynets.

Read more

Minimal Linux distros for the Ubuntu refugee

Fed up with Ubuntu? Image from Wikipedia.
Fed up with Ubuntu?

I’ve seen many people get frustrated with Ubuntu’s new direction in terms of its user experience, its recently worsening speediness, and its mixed-bag Unity interface. I was one of them! When I first tried Ubuntu back in 2008 (version 8.04 LTS), it ran like a dream on my shoddy 1.6GHz, 1GB DDR2 RAM, Windows Vista laptop. I loved GNU/Linux’s ease of use, efficiency, and its immunity to virtually all known malware. With each release, Ubuntu seemed to get better and better, with a slicker interface, better driver support, bugfixes, and a more diverse package repository every time.

When version 10.04 LTS was released, that’s when the shit hit the fan for me. I liked its new “Ambience” theme and I was enthusiastic about the improved Linux kernel release.

Later on, problems started cropping up. My wireless drivers broke down unexpectedly, 2D/3D acceleration performance was worsening on my integrated Intel GMA 965, the interface was getting increasingly sluggish, boot times were gradually lengthening, and despite my constant config file tweaking and fine tuning, my frail laptop eventually sank into a dependency hell.

I tried out Kubuntu instead for a while, but I didn’t like KDE, so I wiped it soon after. I tried Xubuntu, and while it helped speed up my machine a little, I couldn’t seem to get used to Xfce and its little quirks either, so that distribution was out the window as well.

Ubuntu version 10.10, however, was a far better performer on my laptop than 10.04, and with some more command-line knowledge and some system administration experience under my belt, I managed to keep Ubuntu chugging along for a long, long time on my weak laptop hardware. Those were reasonably happier days, and my programming experience flourished.

By then, I now had a fully custom-built desktop with a Core 2 Duo, 2GB DDR2 RAM, which could run Ubuntu a lot better than my laptop, so I migrated my data there. Still, I longed for an alternative distribution that would run more efficiently on my old lappy.

Read more

uShell Advances… if Slowly

µShell Desktop Screenshot
A screenshot of the latest µShell build (as of this writing).

My hobby shell replacement project, µShell, is improving a lot. It is still far from being finished, and it has a few glitches, but it is still a useable, but limited, shell replacement.

Originally, I was seriously concerened with its high memory usage, but I realized that it seemed to run slowly only because it was being compiled and executed from my USB backup drive. After unplugging the drive and executing the program from my desktop, it ran like a dream. Lately, I have managed to implement some new features during the past few months:

  • A proof-of-concept taskbar. It currently has only two functional buttons:
    1. iTunes Hide: This button will check to see if iTunes is running. If it is, it will hide it.
    2. iTunes Show: The exact opposite of the other button. I’m sure you can guess what it does.
  • Filled the code up to the brim with useful comments. You don’t really need extensive documentation (you will need to read the SOURCEMAP file, though) as the comments serve this purpose well enough.
  • Improved the looks of the program (added translucency and new icons from the Elementary Project’s icon set for Linux).
  • The beginnings of a unified settings manager. It barely has any controls on it, but it’s starting to make use of C#’s Properties.Settings.Default plumbing under the hood. There is still much room for improvement, though.
  • Virtual Desktops! It took me so long to implement this. I feel my head gained weight with all of that reading. It is still limited, though: it only supports two desktops, and there seems to be a severe glitch where µShell doesn’t always start on the second desktop, so when you switch to the second one, you are stuck there.

I understand this shell may be sub-par in its present state, but please remember that although I have been working on it since 2010 (not counting the VB 2008 “Altershell” prototype made in 2009), but only one to six hours a day and with five-month breaks in between. I believe that if I could find a way to effectively juggle high school, summer camps, and my free time, I could really exploit its potential and make something great out of it.

If you wish, please check out my new YouTube video that I have uploaded, which showcases the latest nightly Git build of µShell, which can be found here. Also, if you wish to see the three new & recently added shell screenshots, you can find them in the Pictures page.

Sorry that this post is kind of short in comparison to others (or maybe you are happy that it isn’t a big lecture), but I just wanted to promote my project a bit, after so many long months of no status updates.

A List of Ethical Hacking Tools: Part 2

Well, I decided to respond to part 1 of this series with a little shell script which automatically grabs a suite of ethical (and not-so-ethical) hacking and programming tools freely available on Ubuntu’s software repository listings. This should work fine under Debian or other similar distributions as it uses simple apt-get commands, but I cannot promise anything. I will revise this series of posts periodically to improve the listings and fix scripting bugs as time progresses.

See full source code