SVN Access
To allow users access to our source code tree as well as to allow multiple developers to work in a collaborative fashion, the project uses a source code control/management system (SCM) called Subversion, or SVN. To begin connecting to the SVN server, you will first need to download an SVN client.
There are two popular clients for Windows, and the only ones that we can support at the moment. If you have another client, you are free to use it, but we cannot provide instructions or any other sort of help. The first client is called TortoiseSVN, and it is an Explorer shell extension with a graphical interface designed for easy usage for anyone familiar with Windows Explorer dialogs. It can be obtained from http://tortoisesvn.tigris.org and is free of charge.
Once the client is installed, open an Explorer window and navigate to a folder where you would like to download the source code. Right-click inside the Explorer window on an empty space, and a new option should appear on the right-click menu, called "TortoiseSVN". Move the mouse over the menu, and choose "Checkout" from the submenu which will appear. The following dialog should appear:

In this example, the directory where the right-click was performed is c:\programming. The important thing to write is the URL which you see in the image above, since this is the URL of the project's SVN server: svn://svn.tinykrnl.org/tinykrnl. Once you are satisfied with the directory where you wish to download the source code, press "OK". This operation is called a "checkout". Once complete, you should have the entire source code downloaded in this folder. Preferably, it should be empty and dedicated to TinyKRNL, to avoid conflicts or ignored files.
Since the project members update the source code on a frequent basis, it is important that you always update your tree as often as needed, in order to stay fresh with the latest updates. To do so, simply right-click on the directory where TinyKRNL was checked out, choose "TortoiseSVN" from the menu again, and this time select the "Update' command. This will perform an incremental update of all the files which have changed since your last update or first checkout.
TortoiseSVN provides many more options, including log files, graphical status reports, branches, etc, so be sure to check out the TortoiseSVN User's Manual to find out more about the client. However, this basic information is all you require for generic usage.
If you prefer using a command line client, you can download it from http://subversion.tigris.org/project_packages.html. Make sure to scroll down to the "Windows NT, 2000, XP and 2003" section and follow the links given there. Once the client is downloaded, open up a command prompt window and navigate to the directory where you wish to perform the checkout. Write the following command: "svn co svn://svn.tinykrnl.org/tinykrnl", and the download should begin. Whenever you wish to update, you can simply write "svn up" while inside the TinyKRNL directory.
Note that you can use both the graphical client and the command line client to manage your TinyKRNL SVN Directory. This can sometimes be preferable since both clients have some quirks which the other does not.
^ TOPDirect Download
If you cannot download or install the SVN Clients shown above (ie: if you are at work), you may download the nightly releases in source code packages from the Downloads section of the site. This will contain a 7zipped file with a copy of the TinyKRNL source tree, so you will need to obtain a 7zip compatible client, such as 7z (from http://www.7zip.org) or WinRAR (from http://www.rarsoft.com). It is possible that newer versions of WinZIP might also support this compression. When extracting, make sure that your utility keeps the path structure so that all fields are placed in the right directories.
Finally, while we do provide these nightly packages, they are not the recommended way of obtaining the source code, because of the strain this puts on our web server instead of using the SVN server. If you only wish to navigate the source code to view it, do note that we provide an online SVN Browser (accessible from the Documentation section) which will give you a live view of the current code in SVN and allow you to perform diffs, download files, etc.
^ TOPSource Tree Layout
The layout of the TinyKRNL source code is similar to the one used by Microsoft for the NT Tree. Because this might be hard to navigate for users not accustomed to NT denominations and naming syntax, here is a basic breakdown of the tree:
├───base
Base Group
│ ├───boot
Boot Loader and Libraries
│ │ ├───bootvid
Boot Video Library
│ │ └───kdcom
Kernel Debugger Library
│ ├───busdrv
Bus Drivers
│ │ ├───isapnp
IsaPnP Bus Driver
│ │ └───pci
PCI Bus Driver
│ ├───fs
File Systems
│ │ └───fastfat
FAT
│ ├───hals
Hardware Abstraction Layers
│ │ ├───halacpi
ACPI HAL
│ │ ├───halmps
Multiprocessor HAL
│ │
└───halx86
x86 Generic HAL
│ ├───ntos
NT Kernel
│ │ └───inc
Internal Kernel Headers
│ ├───urtl
Runtime Library Test Program (NCLI)
│ └───win32
Win32 Core
│
└───winnls
Windows NLS Support Library
│
└───data
NLS Files
├───drivers
Drivers
│ ├───filters
Filter Drivers
│ │ └───mountmgr
Mount Manager
│ ├───input
Input Drivers
│ │
└───pnpi8042
i8042 Port Driver
│ ├───storage
Storage Drivers
│ │
├───classpnp
Class Driver PnP Library
│ │ ├───disk
Generic Disk Class Driver
│ │ ├───ide
IDE Drivers
│ │ │
├───atapi
ATAPI Driver
│ │ │
├───inc
Shared Headers for IDE Drivers
│ │ │
├───miniport
IDE Miniport Drivers
│ │ │
│ └───intel
Intel IDE Mini-Driver
│ │ │
├───pciidex
PCI IDE Library
│ │ │
└───share
IDE Shared Library
│ │ ├───newft
Fault Tolerant Disk Driver
│ │ └───partmgr
Partition Manager
│ └───wmilib
WMI Library
├───public
Shared Libraries/Headers
│ ├───ddk
External Kernel Mode (DDK)
│ │
└───lib
Libraries
│ │
└───i386
x86 Libraries
│ ├───internal
Internal Headers
│ │
└───Base
Base
│ │
└───inc
Headers
│ │
├───arch
Generic Architecture
│ │
└───i386
x86 Headers
│ └───sdk
External User Mode (SDK)
│
└───inc
Headers
├───release
Binary Release Tree (matches \Windows)
│ ├───fonts
│ ├───sym
Symbols
│ │
├───full
Full (private) Symbols (organized by directory/extension)
│ │ │
└───system32
│ │ │
├───dll
│ │
│
├───exe
│ │ │
└───sys
│ │ └───stripped
Stripped (public) Symbols (organized by directory/extension)
│ │
└───system32
│ │
├───dll
│ │
├───exe
│ │
└───sys
│ └───system32
│
└───drivers
├───tools
Dazzle (Build System)
│ ├───docs
Dazzle Documentation
│ ├───template
Makefile Templates
│ │
├───dztemplt
Dazzle "sources" Template
│ │ └───vctemplt
MSVC "vcproj" Template
│ └───tstsuite
Test Suite
└───windows
Windows Group
└───core
Core Win32 (win32k)
├───ntgdi
NT GDI Server
└───fonts
Fonts
Submitting Patches
If you have found a bug in TinyKRNL or wish to implement a new function, then your contribution will be greatly appreciated! Instead of simply sending some copy/pasted code or generating your own diffs with tool Foo or Bar, we have strict guidelines for patch submission to ease the process for both you and our team.
The one and only supported way of generating a patch is to use your SVN client's integrated "diff" command. For TortoiseSVN, this means right-clicking in your TinyKRNL directory, choosing the "TortoiseSVN" menu and then selecting the "Create Patch" command, which should bring up the following dialog:

This example includes a multitude of locally generated files by MSVC. TortoiseSVN will automatically deselect them for you. Do not select them, if present! You only want to generate a patch file for the actual files you've modified. In this example, the Disk Class Driver was modified in the enum.c file, and Tortoise has detected that and checked the file for you. Once you press OK, a new dialog will come up and ask you for a destination file name. Give your patch a meaningful name. For example, DiskAddDeviceImplementation.patch, and not disk.patch. Once that is done, use your mail client to *attach* the file and send it to someone in the team. Do not copy/paste the patch file.
If you are using the command line client, then open a command prompt window and navigate to your TinyKRNL directory, and issue the following command: "svn diff > patchname.patch". Where patchname is a meaningful name for your patch. Just like TortoiseSVN, the command line client will ignore any MSVC files, so you shouldn't worry about the input.
Patches which modify the directory structure in any way, add or remove files, or change SVN properties are not allowed. Our directory structure has been carefully planned and if you strongly feel a change is necessary, please talk to the team instead of submitting a patch.