From ReactOS Wiki
Jump to: navigation, search

This is the changelog for ReactOS™ version 0.2.8 (released 29 October, 2005), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft™ Windows NT™ and subsequent Microsoft operating systems such as Windows 2000™ and Windows XP™. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was version 0.2.7 (released August 22, 2005).


Generic 0.2.8 Changes


ReactOS Core

Kernel and Executive (NTOSKRNL)

  • Fix PsKillMostProcesses to run in the context of the system process. (Hartmut Birr)
  • Implemented IRP_MJ_QUERY_VOLUME_INFORMATION/FileFsDeviceInformation. (Hartmut Birr)
  • Implemented MEMORY_AREA_PEB_OR_TEB and MEMORY_AREA_PAGED_POOL for MiQueryVirtualMemory.(Hartmut Birr)
  • Make GDB available for release builds (Gé van Geldorp)
  • Fix GDB backtrace (Gé van Geldorp)
  • Fixed APC delivery bug with Normal Routine receing from parameters (Alex Ionescu)
  • Fixed thread termination APC semantics (Alex Ionescu)
  • Disable APC Queuing and add APC Flushing during thread shutdown, call Lego routine during thread shutdown (Alex Ionescu)
  • Properly decrease Thread Quantum during Waits (Alex Ionescu)
  • Optimize locking in Timer Code (Alex Ionescu)
  • Fix Timer Object Type Initializer to actually use ExpTimerDelete when the object is deleted. (Alex Ionescu)
  • Fix Initializer to report correct memory usage of timer object. (Alex Ionescu)
  • Fix Initializer to report OBJ_OPENLINK as an invalid attribute for timer objects. (Alex Ionescu)
  • Use correct access masks when modifying or querying timer objects. (Alex Ionescu)
  • Handle wake timers in NtCancelTimer. (Alex Ionescu)
  • Return warning NTSTATUS code if a wake timer is requested but not supported by the system (default on ROS). (Alex Ionescu)
  • Check for valid timer type in NtCreateTimer. (Alex Ionescu)
  • Check for valid period in NtSetTimer. (Alex Ionescu)
  • Don't dereference the timer in NtSetTimer three times.(Alex Ionescu)
  • Return the correct Due Time in NtQueryTimer by substracting the stable interrupt time. (Alex Ionescu)
  • Optimize Lookaside List implementation (Alex Ionescu)
  • Fix bugs in Semaphore code (Alex Ionescu)
  • Fixed a bug in IoCreateDevice and added an optimization (Alex Ionescu)
  • Added failure cases in NtAllocateVitualMemory (Alex Ionescu)
  • Fixed NtSignalAndwaitForSingleObject to use SEH and optimized it for speed (Alex Ionescu)
  • Implement SeDefaultObjectMethod for security callbacks of objects which don't have a custom one.
  • Initialize more fields when creating an Object Type (Alex Ionescu)
  • Correct the Pool Charge for Object Types, select a Default Object, always use a security procedure, read global flag for maintaing type lists, set the pool type (Alex Ionescu)
  • Initialize a Default Wait Object. (Alex Ionescu)
  • Fix security callback for objects. (Alex Ionescu)
  • Completely reimplemented NtWaitForMultipleObjects not to use 25% of available stack space and added checks for invalid waits. Also optimized for speed to remove a call which significantly slowed down execution.
  • Use DefaultObject from Object Header and remove all previous associated hacks, including the IO_TYPE hack. The DefaultObject will either be NULL, an offset to an internal Object Event, or a pointer to a default event. We handle all three. (Alex Ionescu)
  • Guard KeWaitXXX calls with SEH since it can raise exceptions. (Alex Ionescu)
  • Fixed a large amount of bugs in ObpAllocateObjectAttributes & Name
  • Fix NtSuspendThread: correct PreviousMode check, return error if thread is terminating, handle KeSuspendThread's possible exception, only attempt to return previous suspend count if asked to. (Alex Ionescu)
  • Make KeSuspendThread return an exception if the thread has been suspended beyond the limit. (Alex Ionescu)
  • Implement KeQueryBasePriorityThread to return the actual Base Priority Increment (or Saturation Increment) to NtQueryInformationThread. (Alex Ionescu)
  • Fix priority formulas, account for saturation, do proper km_um conversions for out of bounds or saturation priorirites, create an internal priority change function to be called if the lock is already held (Alex Ionescu)
  • Do not report that ROS is running on 0 active processors, that's a bad idea. (Alex Ionescu)
  • Actually check the affinity mask set by NtSetInformationThread (Alex Ionescu)
  • Fix the check in KeSetAffinityThread (Alex Ionescu)
  • Give a valid affinity to the system thread (corresponding to the active cpu affinity set). (Alex Ionescu)
  • Define and use a list of Bus Type GUIDs instead of saving the GUID in a ROS-only field of DEVICE_NODE. (Alex Ionescu)
  • Use a IRP_MN_QUERY_CAPABILITIES PnP IRP to get the Address of a DeviceNode, intead of saving it inside a ROS-only field.
  • Use correct wait mode when checking alertability in KeDelayExecuteThread. (Alex Ionescu)
  • The KTHREAD alterted flag is now properly set to FALSE during APC delivery during traps. (Alex Ionescu)
  • More support for PKEXCEPTION_FRAME has been added for future PPC/IA64/etc compatibility. (Alex Ionescu)
  • Context to/from TrapFrame functions have been greatly fixed to allow for edited frames, special cases, exceptions and also have the necessary support for supporting sanitation based on PreviousMode. (Alex Ionescu)
  • KDBG now shows the proper CS/SS at all times, previous hack was removed. (Alex Ionescu)
  • Systemcall code was optimized a bit and the trap code was made a lot more generic so that in can be made into macros (it currently isn't, for debugging purposes). (Alex Ionescu)
  • V86 Mode trap frame bias has now been added to make trap code a lot more generic and shareable in the future. (Alex Ionescu)
  • Fix Ntcontinue to respect AlertThread paramter. (Alex Ionescu)
  • Fix KiDispatchException's logic, fix hacks when calling KeUserExceptionDispatcher, use correct context flags (Alex Ionescu)
  • Modify some kernel functions (like KeContextToTrapFrame, KiDispatchException, KiInitializeUserApc, etc.) to support a PKEXCEPTION_FRAME for future PPC compatibility. (Alex Ionescu)
  • Reimplement NtContinue to have more platform-independent code, and to protect and validate user-mode context and parameters with SEH. (Alex Ionescu)
  • Fix KiInitializeUserApc to use KeTrapFrameToContext, to save the debug registers, not to deliver APCs during v86 mode, and to protect user-mode stack operations in SEH and probing. Also make it generate the proper stack for the user-mode callback. (Alex Ionescu)
  • Implement KiUnexpectedInterrupt and KiCoprocessorError (Alex Ionescu)
  • Reimplement NtRaiseException in ASM to take advantage of optimizations due to the trap frame being in the stack when called through System call interface. (Alex Ionescu)
  • Fix some functiosn to return with KiServiceExit2 instead of KiServiceExit when required/needed (Alex Ionescu)
  • Implemented NtQueryDebugFilterState and NtSetDebugFilterState (Alex Ionescu)
  • Implemented DbgUiConnectToDbg, DbgUiContinue, DbgUiWaitStateChange, DbgUiRemoteBreakin, DbgUiIssueRemoteBreakin (Alex Ionescu)
  • Fix a bug where APCs were not dispatched after a system call (Alex Ionescu)
  • Implement alldvrm and aulldvrm and export them from ntoskrnl. (Alex Ionescu)
  • Properly support Special APC Disabling. (Alex Ionescu)
  • Allow Guarded Mutex and Guarded Regions to function properly. (Alex Ionescu)
  • Fix several bugs in KeFreezeAllThreads (Alex Ionescu)
  • Optimize KeRundownThread to reduce contention (Alex Ionescu)
  • Set kernel apc pending flag when needed in KeReleaseMutant (Alex Ionescu)
  • Remove duplicated listhead initialization in KeInitiializeMutex (Alex Ionescu)
  • Use correct increment in KeReleaseMutex (Alex Ionescu)
  • Raise right exception in KeReleaseMutant (Alex Ionescu)
  • Add RtlSetProcessCritical (Alex Ionescu)
  • Fix signalstate check in KGATE code (Alex Ionescu)
  • BCB tracing implementation (Royce Mitchell)

Run Time Library (RTL)

  • Implement !DeletePinned case in RtlEmptyAtomTable. (Filip Navara)
  • Fixed the definition of RtlUnicodeStringToCountedOemSize. This will fix bug 756. (Hartmut Birr)
  • We have only to signal the event if someone waits on it in RtlLeaveCriticalSection. (Hartmut Birr)
  • Rewrote RtlCreateUserProcess, RtlCreateUserThread. Updated and fixed RtlExitUserThread, RtlFreeUserThreadStack. (Alex Ionescu)
  • Implement RtlCaptureContext (Alex Ionescu)
  • RtlRaiseException to handle cases when a user-mode debugger is present (Alex Ionescu)
  • RtlRaiseStatus as above, plus set the exception address and capture context (Alex Ionescu)
  • Fix RtlDispatchException, add cases for exceptions in the DPC stack and validate the validity of the exception frames. Add support for exception logging by the global flag. Use TRAP_FRAME/EXCPETION_FRAME instead of Context. (Alex Ionescu)
  • Fix RtlUnwind logic, support cases where it's called with custom arguments instead of NULL. (Alex Ionescu)
  • Reimplement RtlpCaptureContext to work properly, convert exception handler calling functions to INTEL syntax and fix some bugs (like checking for the right unwind flag, clearing volatile register values, etc. Also use some optimizations to increase speed. (Alex Ionescu)
  • Implement KiRaiseException, add SEH to all user-mode parameters and when copying data to the user-mode stack. (Alex Ionescu)
  • Implemented all the Dbg* APIs. (Alex Ionescu)

Native Library (NTDLL)

  • Implement NTDLL's CSR routines in a compatible way. Fix prototypes, argument count, deprecated functions and new functions. Also added NtSecureConnectPort. (Alex Ionescu)
  • Make NTDLL Ki* callbacks have SEH to protect them and return to kernel-mode with notification of any exceptions (Alex Ionescu)
  • Fix seriously broken User-Mode Ldr thunk and APC Callback prototypes (Alex Ionescu)
  • Fix KiUserExceptionDispatcher (Alex Ionescu)
  • Fixed multiple bugs in RTL string routines (Alex Ionescu)
  • Implement DbgPrintEx, vDbgPrintEx, and vDbgPrintExWithPrefix (Royce Mitchell)


  • Complete reimplementation of HAL DMA routines:
    • Proper support for bus-master device adapters.
    • Real implementation of map registers.
    • Basic support for emulating scatter/gather DMA on devices that don't support it in hardware.
    • Support for transfers that aren't page aligned.
    • Proper detection and support of EISA DMA controllers.
    • Fixed prototype for HalFlushCommonBuffer.

(Filip Navara)

Kernel Mode Drivers

Input Device


  • Fix the implement of KeFlushQueueApc
  • Fixed the return value in KeRundownQueue if the queue is empty. This should fix bug 751. (Hartmut Birr)



  • Import VMware BusLogic SCSI driver


  • Create a common library between UHCI and OHCI miniports (Hervé Poussineau)
  • Report USB devices to PnP manager (Hervé Poussineau)
  • Major USB improvments:
    • Improve hardware support in linux_wrapper
    • Add embedded drivers, register them in linux usb stack
    • Add working wrapper for keyboard and mouse devices - now if usbohci or uhci loads, it will be the first to create KeyboardClass0 and PointerClass0 devices, so PS/2 keyb/mouse won't work.
    • Added logic for registering miniport at port driver (like Windows' usb stack does)
    • fixed issues with timing, host controller reset, new devices discovery, other small things (better to see diff :) ).

(Aleksey Bragin)

  • Implemented USBD_ParseConfigurationDescriptorEx and USBD_ParseDescriptors. (Jim Tabor)




  • Implemented:
    • CM_Locate_DevNode_ExW
    • CM_Get_Device_ID_Size[_Ex]
    • CM_Get_Device_ID[_Ex]W
    • CM_Get_Depth[_Ex]
    • CM_Get_DevNode_Status[_Ex]
    • CM_Get_Child_Ex
    • CM_Get_Parent_Ex
    • CM_Get_Sibling_Ex
    • CM_Set_DevNode_Problem[_Ex]
    • CM_Get_Device_ID_List_Size_ExA
    • CM_Get_Device_ID_ExA
    • CM_Get_Device_ID_List_ExA
    • CM_Get_DevNode_Registry_Property[_Ex]A/W
    • CM_Set_DevNode_Registry_Property[_Ex]A/W
    • CM_Set_Registry_Property_ExA
    • StringTableInitializeEx
    • StringTableGetExtraData
    • StringTableSetExtraData
    • CM_Get_Class_Key_Name[_Ex]A/W
    • CM_Open_Class[_Ex]A/W
    • CM_Get_Class[_Ex]A/W
    • CM_Get_Class_Key_Name_ExA
    • CM_Delete_Class_Key[_Ex]
    • CM_Enumerate_Enumerators[_Ex]A/W. (Eric Kohl)


  • Implement basic file operations. WindowsNT compatible file format. (Saveliy Tretiakov)
  • Write events from lpc port to System Log. To read these events, open \ReactOS\system32\config\SysEvent.evt in Windows EventViewer. (Saveliy Tretiakov)
  • RPC server stubs. (Saveliy Tretiakov)


  • implement simple tcp/ip services (Ged Murphy)
  • includes services for chargen, daytime, echo, discard and Quote Of The Day (Ged Murphy)
  • introduce code to run as a service, but not activated yet (Ged Murphy)


Session Manager (SMSS)

Win32™ Personality

User mode subsystem server (CSRSS)

  • Implemented CsrDuplicateHandleTable. (Hartmut Birr)
  • almost do-nothing base source code for new CSR server DLLs host (Emanuele Aliberti)
  • base source code for the core CSR server DLL 'csrsrv.dll' (server 0) (Emanuele Aliberti)
  • base source code for the base WIN server DLL 'basesrv.dll' (server 1) (Emanuele Aliberti)
  • base source code for the console+user WIN server DLL 'winsrv.dll' (servers 3 and 2) (Emanuele Aliberti)
  • Implement csrsrv!CsrSrvInitializeServerDll based on current code from CsrpInitWin32Csr. (Emanuele Aliberti)

Kernel-mode subsystem server (Win32K)

Win32™ Libraries


  • Implemented:
    • RegDeleteKeyValue
    • RegSetKeyValueA/W
    • SetFileAttributesByHandle
    • GetFileAttributesByHandle
    • RegDisablePredefinedCacheEx
    • RegDeleteTree. (Thomas Weidenmueller)


  • Implemented CreateSymbolicLink. (Thomas Weidenmueller)
  • Implemented IsThreadAFiber. (Thomas Weidenmueller)
  • Fixed GetEnvironmentVariable memory allocation. (Thomas Weidenmueller)
  • Implemented GetSecurityInfo, SetSecurityInfo, GetNamedSecurityA/W, SetNamedSecurityInfoA/W, SetEntriesInAclA/W, GetInheritanceSource, FreeInheritedFromArray, GetExplicitEntriesFromAcl, and TreeResetNamedSecurityInfo. (Thomas_Weidenmueller)
  • Reimplment FindFirstFileEx. (Hartmut Birr)
  • Implement MoveFileWithProgressW so it can handle movefile / folder on a volume or to another one. It does not set the attrib or take the EA at accunt (Magnus Olsen)
  • Implement SetComputerNameExA/W (Hervé Poussineau)
  • Rewrote process and thread creation/termination functions to support for:
    • SxS,
    • SFP (SAFER),
    • DllPaths,
    • Proper process environment/paramter block creation
    • Proper console handle management,
    • Tokens/CreateProcessAsUser,
    • Simpler code for path lookup, and more robust.
    • Support for "auto-correction"
    • 16-bit/NE detection
    • A variety of creation flags are now properly supported
    • Added support for an undocumented-yet-known shell flag
    • Alert for flags we don't support yet
    • Catch invalid flag combinations and other caller errors
    • Improve and correct path searcing to use documented behaviours

(Alex Ionescu)

  • Updated fiber support. Added support for Sxs, FLS, FPU State Save, sped up code and fixed startup parameters (Alex Ionescu)
  • Fix wrong SignalObjectAndWait return values. (Alex Ionescu)
  • Retry waiting if STATUS_ALERTED is returned (Alex Ionescu)
  • Open BNO directory with correct privileges, open CSR connection with correct path.
  • Add InWindows boolean to use the right CSR ServerID in windows and add a hack to get kernel32 to be loadable if used with .local to force an application to use our kernel and not the system one. The result of this is that our kernel32 can now load in Windows XP (not 2000). (Alex Ionescu)
  • Export and implement CreateProcessInternalA and CreateProcessInternalW (Alex Ionescu)
  • Export and implement NlsGetCacheUpdateCount (Alex Ionescu)
  • Bug fixes in CreateProcess. (Hartmut Birr)
  • Allocated a converting buffer for WideCharToMultiByte. bug #702. (Hartmut Birr)


  • Create a basic newdev.dll, and implement DevInstallW function (permits to install devices from command line) (Hervé Poussineau)


  • Implemented:
    • SetupDiBuildDriverInfoList
    • SetupDiCallClassInstaller
    • SetupDiCreateDeviceInfoW
    • SetupDiEnumDriverInfoA/W
    • SetupDiGetDeviceInstallParamsA
    • SetupDiGetDeviceInterfaceDetailA/W
    • SetupDiGetDeviceRegistryPropertyA/W
    • SetupDiGetSelectedDriverW
    • SetupDiInstallDevice
    • SetupDiInstallDriverFiles
    • SetupDiOpenDeviceInfoA/W
    • SetupDiSelectBestCompatDrv
    • SetupDiSetSelectedDriverW
    • SetupGetInfFileListW
    • SetupGetInfInformationW
    • SetupInstallServicesFromInfSectionA/W
    • SetupInstallServicesFromInfSectionExW (used during device installation, needed for Plug-and-Play) (Hervé Poussineau)


Some new stuff for directx, but the call are not in use yet. and it is not wort mentor, untill we can test the api, the change was implement some gdientr to gdi32.dll and some change to win32k. (Magnus Olsen)


  • Fix shell32 spec file to properly export LogoffWindowsDialog as the proper ordinal (54) so that explorer won't crash on shutdown when calling it. Implement the LogoffWindowsDialog stub. (Alex Ionescu)


  • fix repositioning of text (brbak)
  • Implemented SetTaskmanWindow and SetProgmanWindow
  • Implement ValidateRect. (Filip Navara)
  • GetMenuStringA and GetMenuStringW inverted the MF_BYPOSITION parameter. Buffers were incorrectly copied in and wrong size returned in GetMenuItemInfoA ansi-structures. (Jens Colins)
  • Implemented VkKeyScan, GetKeyboardTypeand, GetKeyboardLayout, ShowOwnedPopups, ArrangeIconicWindows, SetMenuItemBitmaps (Jim Tabor)

Libraries shared with Wine

Win32™ Applications



  • rewrite of the netstat tool to simulate the MS app (Ged Murphy)
  • implemented -a -e -n -p -r -s and interval (Ged Murphy)


  • alter output to simulate the MS route utility (Ged Murphy)


  • wrote tracert and added it to the build (Ged Murphy)


  • Fixed a bug in IsConsoleHandle. (Hartmut Birr)
  • Speed Optimize the delete command. (Hartmut Birr)
  • Fixed the allocation of the buffer for the environment variable in ProcessInput. (Hartmut Birr)
  • Restore console title after running a command (Gé van Geldorp)
  • Complete copy command rewrite to include all features of MS CMD. (Brandon Turner)
  • CD rewrite and support paths on different drives. (Brandon Turner)
  • Implemented /P in dir for paging. (Brandon Turner)
  • Implemented ConOutResPaging. (Brandon Turner)
  • Implemented Windows style tab complete. (Brandon Turner)
  • Changed the way start and execute parse the file name to allow ". Bug #690 (Brandon Turner)
  • Implemented batch file redirection. (Brandon Turner)
  • Make sure the path displayed by $P is the correct case. (Brandon Turner)
  • Implemented better handling of escape char ^. (Brandon Turner)
  • Implemented the proper useage of %PROMPT%. (Brandon Turner)
  • Fixed del allow same features as MS CMD. (Brandon Turner)
  • Fixed dir *. it only show folders (Magnus Olsen)
  • Fixed bug 739 in bugzila, can not create file notepad newfile.txt at cmd prompt (Magnus Olsen)
  • Fixed type can handler \n at text output thx ravelo for the small patch.
  • Do not crash if the prompt command name are binger that 260char or the command line. (Magnus Olsen)
  • Fixed bug in searching for bat/cmd files (Magnus Olsen)
  • Implement start execute support for bat/cmd file. woking in windows (Magnus Olsen)
  • lemented "" remove for the start command. This makes 'start dir1\"dir2a dir2b"\dir3\foo.exe param' work change by Martin Rottensteiner irc nick ravelo
  • Fixed bug in date if the input arg are not right dateformat, it should promt after new date. (Magnus Olsen)
  • Fixed more cmd goto bugs. found labels bugs, and search label bugs, param bugs. now it should work fine (Magnus Olsen)
  • Make CMD rember startpath when you change from start drive to another drive. (Magnus Olsen)
  • Fixed pipe bugs (Magnus Olsen)
  • Fixed all bugs in cmd commands cd, make it rember the last directory for each drive. make c: working, make cd f f working. We can not found any more bugs cd rewriting was done by BrandonTurner and me, Brandon rewrite cmd_chdir and I add two functions that we will use for cd and other commands to get and set current drive path. The /D are also implement in CD (Magnus Olsen)
  • Add environment variable COPYCMD to copy (Magnus Olsen)


  • Adjust output graphics when resizing the application window (Martin Fuchs, patch from watz at


  • Fix double-clicking Control Panel items (Gé van Geldorp)
  • Handle .msi files (Gé van Geldorp)
  • Fix icon alignment when the screen width is not a multiple of the icon spacing (Gé van Geldorp)
  • Make the explorer taskbar look a bit nicer (Filip Navara)
  • Fix the taskbar button resizing to account for button spacing. (Filip Navara)
  • Update spanish translation (Filip Navara, patch from Patricio Martínez)
  • new tool bar icons for the drive bar (Martin Fuchs)
  • dynamic explorer start menu sidebar size (Martin Fuchs)
  • new, smaller startmenu pictures using the dynamic explorer start menu sidebar feature (Magnus Olsen)
  • MDI/SDI option dialog: pictures for illustration, remove resizable flag (Martin Fuchs)
  • new option to open explorer subfolders in separate windows (Martin Fuchs)
  • fix directory traversing in explorer SDI windows (Martin Fuchs)
  • fix tree list image loading (Martin Fuchs)
  • complete german resources for explorer (Martin Fuchs)
  • "execute" menu entry (Martin Fuchs)
  • activate execution from command bar (Martin Fuchs)
  • fix UNICODE control panel calls to handle double clicks on the task bar clock (Martin Fuchs)
  • one-click activation of "Start" button (Martin Fuchs)
  • implemented command line parser for Explorer (Martin Fuchs)
  • Fix for Bug 330: Correctly handle WM_COMMAND messages in web windows without web control (Martin Fuchs)
  • replace "search computer" start menu entry by a "not yet implemented" message (Martin Fuchs)



  • Reset on new calculation (brbak)
  • Fix precision bug (Slicencium)



  • Add installation path for VMware 5.5. (Mike)



  • Properly handle partition(0) to mean active partition (Gé van Geldorp)
  • Don't trust the returned date/time from the BIOS. QEmu messes this up sometimes. (Gé van Geldorp)
  • Fixed the size of the hyperspace area (thanks to Filip Navara). (Hartmut Birr)
  • Enabled Pae mode in freeldr if it is requested. (Hartmut Birr)
Changelogs / Versions
0.0.x Series 0.0.8 | 0.0.9 | 0.0.10 | 0.0.11 | 0.0.12 | 0.0.13 | 0.0.14 | 0.0.15 | 0.0.16 | 0.0.17 | 0.0.18 | 0.0.19 | 0.0.20 | 0.0.21
0.1.x Series 0.1.0 | 0.1.1 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5
0.2.x Series 0.2.0 | 0.2.1 | 0.2.2 | 0.2.3 | 0.2.4 | 0.2.5 | 0.2.6 | 0.2.7 | 0.2.8 | 0.2.9
0.3.x Series 0.3.0 | 0.3.1 | 0.3.2 | 0.3.3 | 0.3.4 | 0.3.5 | 0.3.6 | 0.3.7 | 0.3.8 | 0.3.9 | 0.3.10 | 0.3.11 | 0.3.12 | 0.3.13 | 0.3.14 | 0.3.15 | 0.3.16 | 0.3.17
0.4.x Series 0.4.0 | 0.4.1 | 0.4.2 | 0.4.3 | 0.4.4 | 0.4.5 | 0.4.6