This is the FreeDOS Contribute How-to about different ways you might contribute to the FreeDOS Project.

FreeDOS has always been about developers coming together to write code. In that spirit, I'd like to suggest a few things I think would be great for the next release of FreeDOS.

If you are eager to contribute, but you need help in finding the right direction, we have assembled this list of projects that should help you get started:

If you're a non-programmer

  • If you speak a language other than English, provide your translations of FreeDOS programs at FD-NLS. This is a list of program messages in English, Spanish, Italian, and other languages.
  • Make FreeDOS easier to use by keeping the FreeDOS Wiki up-to-date. Write new entries, or proof-read/edit existing entries. Contact Jim if you need an account.
  • Write articles about FreeDOS for websites. This will help keep DOS visible in people’s minds, and help promote FreeDOS as a viable DOS alternative.
  • Respond to FreeDOS questions in online email lists and forums.

If you're a beginner programmer

  • Test FreeDOS programs and report any bugs.
  • Test DOS games on FreeDOS and report any bugs if they don't work properly on FreeDOS.
  • Test DOS applications on FreeDOS and report any bugs if they don't work properly on FreeDOS (for example, the program might rely on some obscure MS-DOS feature that might not exist in FreeDOS).
  • Find a program that is doesn't have many code comments, and add comments in the code. This will make it easier for others to contribute.
  • Adapt an existing FreeDOS program to use the Kitten library for Localization. This will make FreeDOS more accessible to users who do not speak English as their first language.

If you're an experienced programmer

  • Port FreeDOS utilities to OpenWatcom C (our preferred C compiler) and NASM (our preferred assembler). Some older FreeDOS programs were written for Borland C, Turbo C, Microsoft C, Microsoft MASM, or Turbo TASM. This may involve using #ifdef statements to detect the compiler and include or exclude certain code. Also be sure to update any Makefiles or other build scripts to use the different compilers.
  • Write a compatibility library that allows your favorite C compiler for DOS to compile DOS programs in the same way as the FreeDOS reference standard compiler.
  • Apply some much-needed patches to the Freemacs editor: There's a list of fixes that needed to be patched in 1.6d that were never applied. Also, Freemacs will crash with "mode mono."
  • Write some cool edit modes for Freemacs. This would require that you learn MINT, the script language for Freemacs. You can look at the documentation to learn how to program in MINT. Some ideas to start with: an HTML-authoring mode (html-mode) or a mode for editing BASIC programs (basic-mode).
  • Port GNU utilities to FreeDOS, such as using IA-16 GCC (IA-16 GCC requires a '386 or better to compile, but programs compiled with IA-16 GCC run on all CPUs) or DJGPP (might be the only option for some larger programs).
  • Create a new alternative shell, similar to COMMAND.COM but with expanded BAT programming. A few ideas: Use SET to assign values to variables, and BASIC's LET to assign values based on arithmetic; Support the standard DOS batch programming tests, such as == to test equality, and NOT to negate a test. Add extra constructs to test inequality, greater-than and less-than; Extend the FOR statement as a for-next loop.
  • Add international language support to a FreeDOS program that currently only supports one language.
  • Fix bugs in FreeDOS programs. If you can't find the current maintainer, ask on the freedos-devel email list.
  • Volunteer to become the maintainer for a program that doesn't have an active developer.

If you're a highly skilled programmer

  • Fix bugs (such as in FreeCOM, the kernel, FDISK, or others).
  • Add CJK support, probably as a driver that uses graphics mode to display double-byte glyphs.
  • Write a program that makes it easier to share data when FreeDOS runs in a virtual machine.
  • Create a UEFI bootstrap BIOS emulator, perhaps implemented as a CSM.
  • Write a task-switching program for FreeDOS so users can "switch" between different "running" DOS programs. This doesn't need to be full multitasking, putting one program to "sleep" to work in another program could also be useful.