Difference between revisions of "ChangeLog-0.3.7"
m |
|||
Line 1: | Line 1: | ||
+ | '''USE REAL NAMES HERE''' | ||
+ | |||
'''Remember the format for changelogs! * Description (Developer names, bug #x)''' | '''Remember the format for changelogs! * Description (Developer names, bug #x)''' | ||
Revision as of 14:48, 24 September 2008
USE REAL NAMES HERE
Remember the format for changelogs! * Description (Developer names, bug #x)
Developer names are to be in brackets, ONLY IF you have a page on the wiki
Review the Biographies page to see if you qualify for a page on the wiki
This is the changelog for ReactOS™ version 0.3.7 (released *wouldn't you like to know*), 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.3.6 (released 6 August, 2008).
Contents
- 1 General
- 2 Host Tools
- 3 Core
- 4 USETUP
- 5 Win32™ Personality
General
Generic 0.3.7 Changes
- Fix _InterlockedCompareExchange64 intrinsic for x86 (patch from hackbunny) (Stefan Ginsberg)
- Update 3rd Party lib Document. (Daniel Reimer)
- Update DejaVu Fonts from 2.24 to 2.26 (Daniel Reimer)
- Update ReactOS Calc to Version 1.10. (Carlo Bramini)
- Sync winhlp32, wordpad and xcopy with wine. (Daniel Reimer)
Translations
- Added/Updated Bulgarian translations (CCTAHEB), bugs 3661, 3697
- Added/Updated Czech translations (Radek Liska), bug 3600
- Added/Updated French translations (Jean Michel), bugs 3651, 3652, 3653
- Added/Updated Italian translations (Paolo Devoti), bugs 3642, 3664, 3682, 3729
- Added/Updated Korean translations (Seungyu Kim), bugs 3665, 3741
- Added/Updated Norwegian translations (Lars Martin Hambro), bugs 3516, 3618, 3631, 3637, 3670, 3675, 3726
- Added/Updated Polish translations (Maciej Bialas), bugs 3630, 3659, 3694, 3705
- Added/Updated Polish translations (Olaf Siejka)
- Added/Updated Slovak translations (Mario Kacmar), bugs 3649, 3721, 3722, 3723, 3738
- Added/Updated Spanish translations (Javier Remacha), bugs 3588, 3668, 3700
- IDS_PROPERTIES Translation (Victor Martinez Calvo), bug 3655
- Rename the Norwegian RC Files to no-NO.rc, which is correct according to MSDN. (Daniel Reimer)
- Syssetup: Adjust size of controls for italian translation (Carlo Bramini), bug 3555
Host Tools
Buildno
Gendib
RBuild
Rsym
Core
Bootloader (FreeLoader)
Kernel and Executive (NTOSKRNL)
- Get rid off LIST_FOR_EACH and LIST_FOR_EACH_SAFE in ntoskrnl (Stefan Ginsberg)
- Change numerous KEBUGCHECK(0) to ASSERT(FALSE) (Stefan Ginsberg)
- Move kernel mode implementation of RtlpGetStackLimits from crt to ntoskrnl (Stefan Ginsberg)
CM
DBGK
- NtDebugActiveProcess: Don't leak a handle if user mode tries to debug the system process (Stefan Ginsberg)
- DbgkpPostFakeThreadMessages and DbgkpSetProcessDebugObject: Don't dereference a thread/debug object when we are supposed to reference them. Now WinDBG can attach to a process without bringing down the system. (Stefan Ginsberg)
EX
- Remove deprecated ExfpInterlockedExchange64 (Stefan Ginsberg)
FSRTL
- Change KEBUGCHECK(0) to KeBugCheck(FILE_SYSTEM) (Stefan Ginsberg)
IO
- Add IoEnumerateRegisteredFiltersList and IoGetPagingIoPriority stubs and exports (Stefan Ginsberg)
- Use the queued spinlock in IoAcquireCancelSpinLock/IoReleaseCancelSpinLock and IoAcquire/ReleaseVpbSpinLock instead of a regular, ReactOS specific spinlock (Stefan Ginsberg)
- NtQueryInformationFile and NtSetInformationFile: Don't clear the IRP_SYNCHRONOUS_API flag if it has been previously set, and remove the hack in IopCompleteRequest which worked around this. (Stefan Ginsberg)
- Implement IoSetFileOrigin (Stefan Ginsberg)
KD
- Add KdRefreshDebuggerNotPresent stub and export (Stefan Ginsberg)
KDBG
- Use RtlCopyUnicodeString instead of RtlInitUnicodeString. Fixes a memory leak and bad (stack) pointers (Stefan Ginsberg)
KE
- Add KeAcquireInStackQueuedSpinLockForDpc, KeReleaseInStackQueuedSpinLockForDpc, KeAcquireSpinLockForDpc, KeReleaseSpinLockForDpc, KeRegisterNmiCallback, KeDeregisterNmiCallback, KeInitializeCrashDumpHeader and KeTestSpinLock stubs and exports (Stefan Ginsberg)
- Export KiBugCheckData, KeI386MachineType and KeInitializeThreadedDpc (Stefan Ginsberg)
- Fix stack size calculations in KeInitThread , KeAttachProcess and KeStackAttachProcess (spotted by Alex) (Stefan Ginsberg)
- In NtYieldExecution, KiSwapThread and KiIdleLoop, hack "sync" to the next thread's stack before switching to it. Otherwise, because of broken Mm behaviour, we may page fault while interrupts are disabled. A hack in the trap handler works around this, but the hack still stays because these changes appear to be insufficient. (thanks to Alex for his help with this issue) (Stefan Ginsberg)
- Rework Mm hack-syncing to go through MiSyncForProcessAttach and MiSyncForContextSwitch (Stefan Ginsberg)
- Fix a inverted check in KeStartProfile which either leaked memory or freed memory the caller expected to use (Stefan Ginsberg)
- ASSERTify two assumptions in KeRemoveByKeyDeviceQueue and KeRemoveByKeyDeviceQueueIfBusy to catch infinite loops (Stefan Ginsberg)
- Export KeSaveFloatingPointState/KeRestoreFloatingPointState for all architectures, and stub the API when it is not applicable. (Stefan Ginsberg)
- Use THREAD_TERMINATE_HELD_MUTEX bugcode instead of "0", and add said bugcode. (Stefan Ginsberg)
MM
- Add MmAllocatePagesForMdlEx stub and export (Stefan Ginsberg)
OB
- Use correct bug code (INVALID_KERNEL_HANDLE) when kernel tries to close a protected handle (Stefan Ginsberg)
PS
- Fix a typo PsTerminateSystemThread which led to inverted behaviour and caused it to terminate user threads and return "invalid parameter" for system threads. (Stefan Ginsberg)
- Fix a inverted check in PspExitThread which caused worker thread termination to bugcheck due to a flag being set (because worker threads modify this flag themselves). This only worked for other threads because KeInitThread set the flag incorrectly (fixed this too). (Stefan Ginsberg)
- NtQueryInformationProcess with ProcessImageFileName query type: Free the buffer allocated by SeLocateProcessImageName, and set return status correctly if return buffer is too small (so caller will know to allocate more memory). (Stefan Ginsberg, spotted by bug 3714)
PO
- Remove PoSetDeviceBusy export as it is a ddk header macro, and add said macro to our ddk (Stefan Ginsberg)
SMSS
Hardware Abstraction Layer (HAL)
Run Time Library (RTL)
- Clean up and add SEH to vDbgPrintExWithPrefixInternal (patch by Alex) (Stefan Ginsberg)
Kernel Mode Drivers
AFD
- Remove a hack not needed now that we don't get bad IRPs (Cameron Gutman)
- Always set Irp->IoStatus.Status in UnlockAndMaybeComplete (Cameron Gutman)
- Make sure we don't fail without completing the IRP (Cameron Gutman)
- Fix 12 memory leaks (Cameron Gutman)
- Return STATUS_INVALID_PARAMETER if we get passed a NULL ConnectionObject (Cameron Gutman)
- Check for a NULL FCB before accessing it (Cameron Gutman)
- Set the MDL to NULL after we free it so it doesn't get freed again (Cameron Gutman)
- Fail if LockBuffers() fails (Cameron Gutman)
- FCB->Recv.Window and FCB->Send.Window must be allocated before returning STATUS_SUCCESS (Cameron Gutman)
- Make sure MakeSocketIntoConnection() completed successfully (Cameron Gutman)
- Make sure WarmSocketForConnection() completed successfully (Cameron Gutman)
- Don't continue if TdiBuildNullConnectionInfoInPlace() fails (Cameron Gutman)
- Make sure we have a non-NULL TargetAddress before calling TdiSendDatagram() (Cameron Gutman)
- Free the MDL if we fail (Cameron Gutman)
- Use _SEH_YIELD (Cameron Gutman)
- Check for FCB->TdiDeviceName.Buffer before attempting to access it (Cameron Gutman)
- Move memory freeing to ListenComplete (Cameron Gutman)
- Don't crash if the buffers are already freed (Cameron Gutman)
- Set Buf to NULL so we don't try to free it again later (Cameron Gutman)
- Fix a typo resulting in any call to AfdGetSockOrPeerName with Local set to FALSE to return STATUS_NO_MEMORY (Cameron Gutman)
- Move SocketAcquireStateLock out of SEH (Cameron Gutman)
- Make sure we successfully allocated ConnectionReturnInfo and ConnectionCallInfo (Cameron Gutman)
- Make sure ObReferenceObjectByHandle was successful (Cameron Gutman)
- Call SocketStateUnlock before returning (Cameron Gutman)
- Don't complete the IRP again in the completion routine (Cameron Gutman)
- Change STATUS_UNSUCCESSFUL to STATUS_FILE_CLOSED (Cameron Gutman)
- Move the Irp->Cancel check after SocketAcquireStateLock to fix a possible crash (Cameron Gutman)
- Change STATUS_INVALID_PARAMETER to STATUS_FILE_CLOSED (Cameron Gutman)
- Move SocketAcquireStateLock in front of the check for a NULL return from LockRequest to prevent another possible crash (Cameron Gutman)
- Call MmProbeAndLockPages for SysMdl (Cameron Gutman)
- Use the correct IOCTL (Cameron Gutman)
- Make sure we don't complete with STATUS_SUCCESS if MmMapLockedPages fails (Cameron Gutman)
- Use MmGetSystemAddressForMdlSafe instead of MmMapLockedPages (Cameron Gutman)
- Fix a bug that resulted in the status getting changed if TdiQueryInformation failed (Cameron Gutman)
- Use FCB->Connection.Object instead of FCB->AddressFile.Object (Cameron Gutman)
- Enclose MmProbeAndLockPages in SEH (Cameron Gutman)
- Return a more accurate status (STATUS_INVALID_PARAMETER) than STATUS_UNSUCCESSFUL when a parameter is NULL (Cameron Gutman)
- Make sure FCB->AddressFrom is non-NULL (Cameron Gutman)
- Make sure FCB->RemoteAddress is non-NULL (Cameron Gutman)
- Make sure IPAddr is non-NULL (Cameron Gutman)
- Fail if MmProbeAndLockPages doesn't succeed (Cameron Gutman)
- Fail if IoAllocateMdl returns NULL (Cameron Gutman)
- Skip ObReferenceObjectByHandle if HandleArray[i].Handle is NULL (Cameron Gutman)
- Fail if ObReferenceObjectByHandle didn't succeed (Cameron Gutman)
- Set *ConnectionInfo to NULL if we can't allocate memory for ConnInfo (Cameron Gutman)
- Fail if DatagramRecv->Address is NULL (Cameron Gutman)
- Add some missing calls to PollReeval (Cameron Gutman)
- Move an existing PollReeval so it always gets called (Cameron Gutman)
- Set Handle to NULL so we don't try to close it later (Cameron Gutman)
- Free the address we've previously allocated if needed (Cameron Gutman)
- Check if MakeSocketIntoConnection succeeded (Cameron Gutman)
- Check if TaCopyTransportAddress succeeded (Cameron Gutman)
- Check if TdiBuildNullConnectionInfo completed successfully (Cameron Gutman)
- Fail if we can't allocate Qelt (Cameron Gutman)
- Change the status to STATUS_SUCCESS if TdiReceive returns STATUS_PENDING (Cameron Gutman)
- Make sure we successfully allocated memory (Cameron Gutman)
- There are 4 in flight requests not 3 (Cameron Gutman)
- Set the InFlightRequest to NULL when we complete (Cameron Gutman)
TCPIP
- Check to see if the ZwEnumerateKey call succeeded with the larger buffer and continue if possible (Cameron Gutman)
- Don't continue if OpenRegistryKey fails (Cameron Gutman)
- Fail if we can't allocate memory (Cameron Gutman)
- Fix a memory leak (Cameron Gutman)
- Resize the buffer if STATUS_BUFFER_OVERFLOW is returned (Cameron Gutman)
- Close the handle on failure (Cameron Gutman)
- Always set Irp->IoStatus.Status (Cameron Gutman)
- Clear the cancel routine only when completing (Cameron Gutman)
- Fix IRP cancellation (Cameron Gutman, bug 3309)
- Check that we successfully allocated memory (Cameron Gutman)
- Return TDI_NO_RESOURCES instead of STATUS_NO_MEMORY (Cameron Gutman)
- Return TDI_NO_RESOURCES instead of TDI_INVALID_REQUEST when we can't allocate memory (Cameron Gutman)
- Use NewBuf instead of Data so we actually use the buffer we allocate (Cameron Gutman)
- Check status from RawIPStartup, UDPStartup, and TCPStartup (Cameron Gutman)
- Make sure we successfully allocated memory (Cameron Gutman)
- Return the actual status not NDIS_STATUS_SUCCESS always (Cameron Gutman)
- Add the adapter to the adapter list only after it is bound to the IP layer (Cameron Gutman)
- Fail if TCPSocket doesn't complete successfully (Cameron Gutman)
NDIS
- Returning STATUS_BUFFER_OVERFLOW is ok also since we're only trying to get DriverKeyLength (Cameron Gutman)
- Initially set PoolHandle, ConfigurationHandle, KeyHandle, and Filter to NULL (Cameron Gutman)
- Initially set PortOffset to 0 (Cameron Gutman)
- Fix 9 memory leaks (Cameron Gutman)
- Don't return NDIS_STATUS_SUCCESS when we really failed (Cameron Gutman)
- Initially set Packet to NULL (Cameron Gutman)
- Initially set NdisProtocolHandle to NULL (Cameron Gutman)
- Accept STATUS_SUCCESS also as done in config.c (Cameron Gutman)
- Set ParameterValue to NULL on failure (Cameron Gutman)
- Fix a possible crash in the cleanup code (Cameron Gutman)
- Handle AllocatedResources and AllocatedResourcesTranslated separately (Cameron Gutman)
- Fix 4 handle leaks (Cameron Gutman)
- Remove the adapter from the global adapter list if we fail (Cameron Gutman)
- We must call MiniQueueWorkItem while holding a spin lock (Cameron Gutman)
- Call MiniportQueryInformation at the correct IRQL (Cameron Gutman)
- Call MiniportSetInformation at the correct IRQL (Cameron Gutman)
- Call QueryInformationComplete at the correct IRQL (Cameron Gutman)
- Call SetInformationComplete at the correct IRQL (Cameron Gutman)
- Call ProtocolRequestComplete at the correct IRQL (Cameron Gutman)
- Call ProtocolSendComplete at the correct IRQL (Cameron Gutman)
- We must call MiniDequeueWorkItem while holding a spin lock (Cameron Gutman)
- Call MiniportTransferData at DISPATCH_LEVEL (Cameron Gutman)
- Fix a possible crash if Buffer is NULL (Cameron Gutman)
- Use MmGetSystemAddressForMdl instead of MmGetMdlVirtualAddress (Cameron Gutman)
- Implement NdisDprAllocatePacket, NdisDprAllocatePacketNonInterlocked, NdisDprFreePacket, and NdisDprFreePacketNonInterlocked (Cameron Gutman)
- Call KeAcquireSpinLockAtDpcLevel instead of KeAcquireSpinLock when possible (Cameron Gutman)
- Don't hold the spin lock as long in MiniportDpc (Cameron Gutman)
- Queue a work item to do our work that was previously done in MiniportDpc so Send/SendPackets gets called at the correct IRQL (Cameron Gutman)
- Call a serialized miniport's Send/SendPackets handler at DISPATCH_LEVEL (Cameron Gutman)
- Store the current thread (Cameron Gutman)
- Set Status to NDIS_STATUS_NOT_SUPPORTED if we don't support the parameter type (Cameron Gutman)
- Initialize the callback record before calling KeRegisterBugCheckCallback so NdisMRegisterAdapterShutdownHandler should work now (Cameron Gutman)
- Queue the packet if we currently don't have enough resources to process it (Cameron Gutman)
- The handle passed to MiniRequestComplete, NdisMQueryInformationComplete, and NdisMSetInformationComplete is the Adapter not the MiniportBlock (Cameron Gutman)
- Set MiniportBusy to FALSE in all the completion routines (Cameron Gutman)
- Hold the spin lock when requeuing the packet (Cameron Gutman)
- Only call MiniSendComplete if ProIndicatePacket didn't return NDIS_STATUS_PENDING (Cameron Gutman)
- Set MiniportBusy to TRUE if MiniDoRequest returns NDIS_STATUS_PENDING (Cameron Gutman)
- Set MiniportBusy to TRUE in MiniDequeueWorkItem (Cameron Gutman)
- Fail if another miniport request is still in progress (Cameron Gutman)
PCNET
- "0xbaadfood" is not a valid tag pool allocation tag. Use "PcNt" instead. (Stefan Ginsberg)
BOOTVID
FASTFAT
KDCOM
NTFS
RAMDISK
SCSIPORT
VGA
NT System Library (NTDLL)
- Add lots of exports, mostly stubbed, and make the export list compatible with Windows 2003 (albeit a lot of exports are commented out) (Stefan Ginsberg)
- Implement RtlInterlockedCompareExchange64 and RtlGetCurrentProcessorNumber and use them from kernel32 (Stefan Ginsberg)
Static Libraries
CRT
IP
- Release the spin lock before returning (Cameron Gutman)
- Fix 7 memory leaks (Cameron Gutman)
- Complete with the correct status (Cameron Gutman)
- Don't handle OSK_EINPROGRESS since TCPTranslateError already has done the conversion to STATUS_PENDING (Cameron Gutman)
- Set UDPInitialized to FALSE at the end of UDPShutdown (Cameron Gutman)
- Fail if we didn't successfully add the header (Cameron Gutman)
- Move the NULL check immediately after the memory is allocated (Cameron Gutman)
- Fail if PrepareARPPacket returned NULL (Cameron Gutman)
- Make PortsStartup return NTSTATUS so we can make sure memory allocated succeeded (Cameron Gutman)
- Change the callers of PortsStartup to check the return status (Cameron Gutman)
- Pass the status we were given to the completion routine (Cameron Gutman)
- Only continue sending fragments if the last one succeeded (Cameron Gutman)
- Exit the loop when we find the matching Bucket (Cameron Gutman)
- Make sure we allocated Bucket (Cameron Gutman)
- Return OSK_ENOBUFS if we can't allocate SleepingThread (Cameron Gutman)
MINGW
PSEH
- Add _SEH_SetExceptionCode (from hackbunny) (Stefan Ginsberg)
Keyboard Layouts
USETUP
Win32™ Personality
User mode subsystem server (CSRSS)
Kernel-mode subsystem server (Win32K)
Services
services
- Add a reference counter to the service record. (Michael Martin)
- Implemented a common service record delete function. (Eric Kohl)
- Implement REnumDependentServicesA/W. (Michael Martin)
- Implement RChangeServiceConfigA, RQueryServiceConfigA, RQueryServiceConfig2A, RGetServiceDisplayNameA and RGetServiceKeyNameA. (Michael Martin, Eric Kohl)
- RCloseServiceHandle: Remove a service if it has been marked for deletion and reference on service is 0. (Michael Martin, Eric Kohl)
- RControlService: Stop a service only if there are no dependent services running. (Michael Martin, Eric Kohl)
- RCreateService: Add more parameter checking. Set ObjectName to "LocalSysyem" if it doesn't have a name. (Michael Martin, Eric Kohl)
- Change RQueryServiceConfigW to return empty strings vice NULL pointers if information not available. (Michael Martin, Eric Kohl)
- RGetServiceDisplayNameW: Return the service name if display name is not set. (Michael Martin, Eric Kohl)
- RQueryServiceConfigW: Update display name if is has been changed. (Eric Kohl)
- ROpenServiceW: Fail if lpServiceName is NULL. (Michael Martin, Eric Kohl)
Dhcp
- Fixed typo in FindAdapterKey that caused failure to find adapters registry key, resulting in static ip info not being assigned for TCPIP. (Michael Martin, bug #2392)
- Write NameServer determined by dhcp to DHCPNameServer value in registry vice NameServer (Michael Martin, bug #2392)
Control panel applets
Console
Intl
Mmsys
Ncpa
- Fall back on NameServer value in TCPIP\Parameters if interface for adapter does not exist in registry. (Michael Martin, bug #2392)
Sysdm
Telephon
Timedate
Usrmgr
Win32™ Applications
Cmd
Explorer
Msconfig
Notepad
Userinit
Win32™ Libraries
ADVAPI32
- Implement a common RPC Status to Windows Error function. (Eric Kohl)
- Add SEH protection to all calls made to rpcrt. (Michael Martin, Eric Kohl)
- EnumDependentServicesA/W and EnumServicesStatusA/W: don't attempt fix up pointers if the service manager returns an error.(Michael Martin)
- Update with exports new to Windows 2003 (Stefan Ginsberg)
- Make sure we are passed a subkey in RegDeleteKeyA/W (Stefan Ginsberg)
- Make RegQueryValueA conform to Winetests (Stefan Ginsberg)
DBGHELP
- Use strtoui64 instead of non-existing strtoull. This makes dbghelp load again (Stefan Ginsberg)
DNSAPI
GDI32
INETMIB1
IPHLPAPI
- Implement filling GateWayList member of IP_ADAPTER_INFO structure for GetAdaptersInfo function. (Michael Martin, bug #2392)
- Fixed GetIpForwardTable to return correct dwForwardIfIndex for structure MIB_IPFORWARDTABLE. (Michael Martin)
- Use DHCPNameServer value for NameServer assignment if NameServer value is empty in registry. (Michael Martin, bug #2392)
MSAFD
- Handle STATUS_INSUFFICIENT_RESOURCES (Cameron Gutman)
- Handle STATUS_REMOTE_NOT_LISTENING (Cameron Gutman)
- Use Status instead of IOSB.Status in some cases (Cameron Gutman)
- Handle STATUS_BUFFER_TOO_SMALL (Cameron Gutman)
- Handle STATUS_NO_MEMORY (Cameron Gutman)
- Handle STATUS_FILE_CLOSED (Cameron Gutman)
- Handle STATUS_INVALID_PARAMETER (Cameron Gutman)
MSGINA
KERNEL32
- Update with exports new to Windows 2003 (Stefan Ginsberg)
- Don't forget to set the fiber argument parameter in ConvertThreadToFiberEx (Stefan Ginsberg)
- Implement InterlockedCompareExchange64 and GetCurrentProcessorNumber by forwarding to NTDLL(Stefan Ginsberg)
MSVCRT
MSVCRT40
Odbccp32
OpenGL32
PSAPI
- Update with exports new to Windows 2003 (Stefan Ginsberg)
SETUPAPI
SHELLEX
SHELL32
- Set bInitialOwner to TRUE for a mutex we release before waiting for it (Stefan Ginsberg)
USER32
WS2_32
D3D9
- Internal restructuring (Gregor Gullwi)
- Implemented IDirect3DSwapChain9::GetDevice() and GetPresentParameters() (Gregor Gullwi)
- Fixed behavior in IDirect3DDevice9::GetSwapChain() when an invalid index was specified (Gregor Gullwi)
- Replaced depricated IsBadWritePtr() call to a simple NULL check instead (see http://blogs.msdn.com/oldnewthing/archive/2006/09/27/773741.aspx for more info) (Gregor Gullwi)
Versions / Official Changelogs / Community Changelogs | |
---|---|
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 | 0.4.7 | 0.4.8 | 0.4.9 | 0.4.10 | 0.4.11 | 0.4.12 | 0.4.13 | 0.4.14 |