Skip to main content

Software Config

This is a repository of all software I use, hopefully with reasoning behind them. It is not yet complete, and will probably be ever-evolving.

I am a firm believer in free/libre and open source, but especially free/libre software. Keep in mind, free does not refer to "free of cost", but rather to the notion of providing users the freedom to truly own what they pay for. I follow the Free Software Foundation's definition of Free/Libre Software, and my thoughts+ these freedoms are linked here.

Sometimes, I do have to resort to some proprietary software. In that case, I either look for an equivalent open-source alternative, try to see if a Linux version of that proprietary software exists, or (as a last resort) just use Windows. I use an iPhone 14 + Apple Watch combo, mainly due to convinience factor as of now.

Languages

I do low level systems stuff mainly. I am highly familiar with GNU CoreUtils, and the GDB debugger. I love Valgrind as well, the stack traces and memory visualizations are honestly a godsend. I mainly use C++, though am opening up to RUST as well.

As mentioned in Scriting Shenanigans, Python is my go to for any scripts or hobby programs. I have also programmed in R, MATLAB, Haskell, Java, Swift, dotnet, and Kotlin (professionally and hobby), among some others. I really don't like classifying myself as a "what language do you know person", I focus on problems and what the best tooling is for the job to be done. Learning a language, for the most part, is just picking up on the syntax and programming paradigms, but it does not change the basic knowledge required to code.

I love Bash Scripting and Vim Scripting for my own tinkering purposes. For my honors thesis, I have also worked on a lot of x86 Assembly directly (including writing, debugging, and converting). I have become pretty comfortable with these low-level languages, though I do learn something new everyday.

Apart from that, I mainly do Web Dev as a means for end-user application dev. I have experience with PHP, HTML/CSS, JavaScript, Node, React, SQL and MongoDB, Flask, Firebase, and continuously keep learning new technologies. I love the web due to its open nature, and the ability to adapt to any system regardless.

Operating System

Main

On the stable "I-want-stuff-to-work" end of things, I have been a devout Pop!_OS GNU/Linux user for the longest time now. It's basically an Ubuntu derivative, but comes with multiple versions of the ISO that makes installation of core utilities (on top of what Ubuntu provides) much easier. For example, it has a NVIDIA .iso with all drivers included (including CUDA and CUDNN), an arm compatible RasPi version, among many others. Package management is also up to date every time, the desktop environment is amazing (heavily modified GNOME but has it's own taste and uniqueness), and it honestly just works effortlessly (even more effortless than a Mac).

Dell G3 3500 w/ a 1660Ti: Main computer with Pop!_OS (used as a desktop). Does all heavy computation (GPU is a nice for CUDA and ML tasks). Runs Alpine as a guest in Docker for NAS, and in VMs for different tinkering purposes. Runs Trisquel as a guest in a VM for tinkering purposes. Can remote into this while on the go.


On the go

I will most definitely get slack for this as a "Libre software" person, but I use macOS and iPadOS on the go as well. In my opinion, Macs are the only thin and light computer on the market that's as powerful as it is (thanks to Apple Silicon), with a battery that lasts over a day on heavy usage (thanks to Apple Silicon), and is the only UNIX platform (Darwin & BSD) that comes with market support, customer care, warranty, and the ability to run mainstream programs. The iPad only serves three purposes: external Mac display, glorified notebook, and glorified eBook reader (given the exorbitant prices of college textbooks for a hardcopy vs. ebook, the iPad paid off for itself by my second year at UMass, while helping me keep my notes organized and my backpack light).

MacBook Air M2 w/ iPad Mini: Main on-the-go computer. I actually snagged both of these for a pretty good deal :)


Inside a virtualized env

UNIX/Linux

Alpine has my heart as a no-nonsense small OS. It runs beautifully on any hardware I have tried it on, but the primary use case is as a guest OS for virtualizing and containerizing. I currently use it as a guest OS for any VMs I need to spin up for whatever purposes, my docker containers, my Dell computer acting as a NAS server (it runs in a container with Pop!_OS as main), and a 32 bit version on a netbook I salvaged for free to run legacy stuff. Best of all, it is super small to download and super quick to install.

If Alpine does not fit my needs for the above purposes, I use Debian as a fallback. It's more reliable and standardized than Alpine, but comes at the cost of being larger than Alpine (still incredibly small by OS standards, but Alpine takes that to 11).

NT

Windows is a fallback, and needs a lot of resources to run at times. I do have some required software that's Windows only though (Visual Studio, .NET, Postman), so I run it inside a VM. Windows currently does not run as a host on any of my devices, it only runs as a VM guest when necessitated.

I am trying to shift away from Windows in favor of ReactOS, a free and open source reverse engineering of Windows from scratch. Here's some FAQs on their page that tell it better than I can:

ReactOS is a free and open source operating system written from scratch. Its design is based on Windows in the same way Linux is based on Unix, however ReactOS is not Linux. ReactOS looks and feels like Windows, is able to your run Windows software and your Windows drivers, and is familiar to Windows users.

ReactOS is fully legal and adheres to the strongest standards of accountability, ie. it does not use any leaked version of Microsoft's code. ReactOS consists only of clean-room engineered GNU GPL (General Public License) and GPL compatible licensed source code.

Refer to Virtualization, Containerization, Sim/Emulation section for Hypervisors.


About every piece of software I use needs a very absolutely minimum of 8GB RAM, and an ideal of at least 16GB RAM.

Desktop Environments

A smaller subset of the main OS, different Linux flavors can use different desktop environments. To cut to the chase, I use COSMIC, the GNOME implementation of Pop!_OS as my main. I use XFCE as my Linux DE for all the other flavors mentioned above (Alpine, Debian, Trisquel).

I hardly make changes to macOS or Windows.

Other Systems

  • Old 32-bit Acer Netbook that I salvaged from eWaste: Runs 32-bit Alpine with XFCE for running other 32 bit programs. Is actually prone to Y2K38.

Code Editors and IDEs

Sorted by frequency: high to low

  • BBEdit: A macOS native Code Editor being developed for over 30 years. Super stable, packed with features, has a minor learning curve for the more advanced features that's worth it imo.
  • Vim: The quintessential UNIX editor, improved. If I am on any other system that's not a Mac, this is my daily.
  • Jupyter: Data-based Python code, where an explanation & presentation of methods is absolutely crucial. Uses ipynb to split between Markdown cells or Python cells.
  • KATE: The GUI main for Alpine and Trisquel, provides all the core features of VS Code without the Microsoft stuff.

Non active

I do not use these currently, mainly because I don't have a reason to. However, I might come back to them if a project mandates. This is not to say that these are bad editors, I just don't need them as of now.

  • Spyder: Scientific computing in Python, having a variable explorer and data-exploration based features help a lot.
  • RStudio: I have a total of 2 projects on R. RStudio is really powerful for what it does, and has a genuinely very shallow learning curve (at least relatively). Good editor, I am just not the target demographic.
  • MATLAB: The only Engineering-oriented language I have used, check out my iCons 3 project: The Cost of Control.
  • JetBrains: Rare, but super complex projects have really benefitted from the strong debugger, language-oriented IDEs, and refactoring capabilities. Is a memory hog though, so would recommend a high-spec computer. This includes Android Studio.
  • Helix Editor: A post-modern modal text editor. Really stupidly good at what it does, the only times I do not use it is when I need a Neovim plugin.
  • VSCode: Good extension market, has a vim plugin. I don't like the web app nature, Microsoft telemetry and AI stuff, and padded mobile-UI buttons. I come back to this only for codespaces and tunnels.

Photo/Video/Graphic Editing

The following is what I use to facilitate my Photography.

  • GNU Image Manipulation Program, or GIMP, is a libre photo editr which almost rivals Adobe Creative Suite. May have a slightly higher curve of learning, but it is extremely powerful and versatile for what it offers. Beautifully amazing.
  • Darktable: RAW image processor and developer, that I pair with GIMP to offload and edit RAW image fiels (RAW is a file format that captures more information than a compressed JPEG; standard in photography).
  • Adobe Lightroom: For small edits on the go, I rely on the free version of Adobe Lightroom on my phone. I like it, but prefer to not use it whenever possible (only use it in circumstances where absolutely necesssary).
  • Shotcut Video Editor: A Libre Video Editor which, again, rivals that of Adobe's offerings. Has a slight learning curve, but is immensely powerful, and handles a lot of Video Editing paradigms (transitions, fx, voice sampling, etc.) amazingly. I have had no complaints for my amateur Video Editing needs.
  • Canva: An online (proprietary) graphic designer. Used only when absolutely necessary.
  • Affinity: Proprietary photo editor but does away with all Adobe BS. Still learning, haven;t made the call to switch from GIMP (I am very well versed and comfortable in GIMP at this point).

Office Work & typing documents

Writing text-based files? Here's what I use:

  • Libreoffice: Licensed under MPL v2.0, Libreoffice is a Free and Open Source alternative to MS Office, compatible with the OpenDocument formats and the proprietary MS Office formats. LibreOffice is community driven with a governance model that ensures the software is accessible to all (along with source code, and rights to modify the same), transcending all language barriers and boundaries.
  • Google Workspace: Another Office suite, albeit used much less due to the proprietary nature. However, being in university, it is an absolutely crucial tool to enable collaboration and teamwork (multiple people can edit the same documents at the same time), while maintaining aceptable levels of privacy and security over documents.
  • LaTeX: LaTeX i a typesetting language that creates some of the cleanest, crispiest documents ever to exist. While it is the standard for research papers and technical documentation, I have also been using it fo homework. Types in any language, including Math and Code. Can be whatever you want it to be.
    • Want a quick way to try LaTeX? Try Overleaf: a web-based LaTeX editor.
  • Markdown: A quick and easy markup language that I use for quick notes, documentation, and even this entire website (including this webpage you're looking at).
  • Pandoc: A universal document converter that converts any format to any other format through a set of unique tools. Convert Markdown to PDF, Docx to OpenDoc, HTML to Markdown, etc.

Geographic Information Systems

So far, I have done about 3 research projects regarding plotting and mapping data, as well as countless personal projects. I do not see this stopping anytime soon, so here's the toolset I am comfortable with:

In a way, I use QGIS for background researcgh and enjoy the freedom of manipulation and experimentation as a whole, then export the final data and use Leaflet to publish it on the web for everyone to see.

Leaflet used in conjunction with Python or R.

Bibliography Management Systems

This pretty much depends on the nature of the project I am doing. There are 2 main options:

  • Wikindx: Libre Source Bibliography that is self-hosted and uses a MySQL database to store information. I use it locally hosted for my own research (since everything is local), and use a locally hosted version for the LinKaGe Lab with multi-user support and web support.
  • Zotero: Comes into play when I need to have shared bibliographies over the internet, mainly as a ease-of-use. Zotero was used in almost every iCons project listed.

Both of these options share a lot of similarities with each other, except that Zotero is paid for large storage solutions but shareable, while Wikindx is self-hosted and the only constraint is your own computer.

Legacy mention: Aigaion which was replaced by Wikindx. PHP underwent such drastic changes that Aigaion was rendered useless on anything above PHP version 5.

Debuggers & Analyzers

Apart from the usual (extensions for IDEs for different languages, or print statements :P), I do a lot of low-level code. This section also includes a bunch of more things that help in development and analysis, not just debugging.

Only external programs are included here, not the actual debuggers in themselves. For example, the rust_debugger is just included in RUST and has CLI attributes to invoke (or it can latch on to GDB, which is what I do), so that is not mentioned. Moreover, IDE debuggers are not included (Visual Studio already has an excellent .NET and C debugger, but is mentioned above).

These are only external debuggers and analyzers that are not included within the compilers/interpreters themselves, and are not included within an IDE mentioned above. Hence why the list is short.

  • GNU GDB: The GNU Project Debugge, while meant for C/C++ initially, can really debug any language that builds debug flags for it. I use it for C++, RUST, x86 Asm, and some Python Bytecode too.
  • Valgrind: Advanced debugger for C/C++ that maps out memory management, program flow, and overall functioning of computational resoures so that Segmentation Fault can be debugged quicker.
    • Shouout to Uma for introducing me to Valgrind back in CS 230 (Intro. to Systems)
  • ltrace: Command Line Utility that intercepts System Calls and Library Calls from any running process and creates a dump file.
  • Wireshark: Packet tracer and network protocol analyzer, used for analyzing networks. GPLv3'd at that. I use this way more often than I'd think.
  • Ghidra: A Software Reverse Engineering tool; especially useful if access to source code is not present. Ghidra was mainly used in the first iteration of my Undergraduate Honors Thesis at UMass Amherst; while I don't use it much currently, I still want to give it a mention for how excellent the tooling is.
  • Postman: A JavaScript API analyzer and builder, extremely helpful to create APIs that interact within a website or with external 3rd-party tooling. Negatives: proprietary and has a weird pricing ladder, which makes me not want to use it and just rely on the Console.
  • pgAdmin: Open Source GUI workbench for PostgreSQL. I use MySQL Workbench for MySQL. I just refuse to rely solely on the Console for SQL, given how things can mess up quickly.

Server-side computation & Terminals

  • Waveterm: Open Source Terminal that has overtaken whatever barebones terminal that ships with any OS (zsh or Bash), has a lot more cool features built-in that I don't use as much, but some QOL stuff that's pretty good to have. Feels bloated sometimes.
  • Termius: SSH & SFTP Client with insanely good features built in (GUIs, drag and drop support, SSH key handling, concurrent sessions)
  • GNU Bash: The most powerful CLI I have used, ever. Also really the one I have been used to, despite using Powershell considerably as well. ZSH on Mac, though.
  • Windows Terminal: Honestly the hands-down best solution on Windows, now the default in Windows 11. Tabbed terminals, each of which can wither Powershell on host or BASH/ZSH on a guest WSL instance.

Virtualization, Containerization, Sim/Emulation

  • GNS3: Network systems virtualizing software. Libre software as well, works best on Linux with a minimum of 16GB RAM and on an x86 Architecture.
  • Virtualbox: Virtualization Software. New project that will quickly get a file system spread? Just put it in a VM :)
  • Docker: Containerization Software to ensure similar debugging and execution experiences everywhere. Super useful when dealing with low-level code to ensure OS consistencies, or high-level code to plug-and-play different components.
  • QEMU: Emulation for different hardware, including ARM, RISC-V, and x86. Used in the tinkering of MIT PDOS xv6, and in current MorbiOS development.
  • UTM: Main macOS hypervisor. Parallels has GPU passthrough but UTM is free and Open Source (plus I do not need GPU passthrough).

Miscellaneous

  • KDE Connect: Cross-platform continuity daemon for Linux, iOS, Android, macOS, and Windows. Basically make all your devices work with one another & not have file mess-ups or incompatibility issues.
  • Figma: Wireframing tool to chart out the behaviour of an application, or the base UI/UX before code. Helps you pln out the whole thing before starting the code out.

Mobile

A whole bunch of iOS Apps that I really love and help me be productive (on top of mobile versions of eveyrthing mentioned above):

  • Working Copy: An iOS Git Client that connects with GitHub, BitBucket, or your own Local/Remote Servers. Works seamlessly with the iOS Files and Cross-App as well.
  • iSH: Alpine Linux Virtualized in a Sandboxed environment on iOS. Does everything you could possibly do in a shell, including creating and deploying local servers or using vim.
  • Shortcuts: The closest thing to "scripting" on iOS, Shortcuts is a drag-and-drop language to provide scripting, automation, and code tasks natively on iOS. Harnesses the full device capability: location, sensors, app actions, your own code, etc. I plan to get a page on the Finechive for sharing my own Device Automations.
  • Chromatica: This is my primary professional camera on iOS.