Visopsys

Software Screenshot:
Visopsys
Software Details:
Version: 0.75
Upload Date: 17 Feb 15
Developer: Andy McLaughlin
Distribution Type: Freeware
Downloads: 67

Rating: nan/5 (Total Votes: 0)

Visopsys (VISual OPerating SYStem) is an open source, small and fast alternative operating system targeted at PC-compatible computers. It is written from scratch and it’s continually in development, since 1997. Its main goal is to gather some of the best ideas from other operating systems.

Great availability

The operating system is distributed as an ISO image that can be deployed to either a USB flash drive or CD disc, an IMG file that must be written on a floppy disk, as well as a source archive for those who want to hack the system and add additional features or just want to see how it all works.

Boot options

There are no boot options on the ISO or IMG files, as the system loads directly and will start to detect various hardware components, such as PS/2 mouse devices, real-time clock (RTC), IDE disk controller, PCI bus controller, etc.

Old-style desktop environment à la Mac OS 9

The desktop environment of the Visopsys operating system looks like the graphical interface of Mac OS 9. It features a top panel for accessing various system settings, such as logout, and and old-style look and feel.

It includes a command window, user manager, program manager, keyboard mapping, image viewer, disk manager, screenshot utility, display manager, console window, configuration editor, as well as an installer, which means that you can permanently install the operating system on a local drive.

Bottom line

Summing up, the Visopsys operating system features real preemptive multitasking, virtual memory, 100% protected mode, massively-monolithic-style kernel, as well as a simple and easy-to-use user interface. Please keep in mind that Visopsys is not a clone of any other operating system and it is not a distribution of Linux.

What is new in this release:

  • Added USB3 (XHCI) support.
  • Greatly improved USB2 (EHCI) and hub support.
  • Added APIC interrupt controller support.
  • Added support for detecting and parsing the Intel multiprocessor table.
  • The USB layer code no longer sets device configurations by default. It is now left up to the individual device drivers, when they determine that a given device is supported. Configuring some unknown, built-in, proprietary devices can cause other devices to stop responding.
  • USB hub removal now triggers a recursive device removal for all downstream things connected via the hub.
  • If a mounted removable disk (such as a USB stick) is removed from the system, a call to kernelFilesystemRemoved() will now act like a forced umount - unbuffering files and removing the filesystem - without attempting further accesses to the physical disk.
  • Added new functionality to count interrupt hooks, and updated some definitions and things in the PCI driver.
  • Physical memory addresses are now treated as unsigned integer values instead of void pointers.
  • Added kernelMemoryGetIo() and kernelMemoryReleaseIo() functions for automating the process of allocating/releasing aligned physical memory, mapping it, and marking it un-cacheable.
  • Added a kernelDebugStop() function to output a message and halt execution when errors are encountered in debug mode.
  • Added a kernelDebugRemoveFile() function as a companion to kernelDebugAddFile()
  • Fixed: In the computer browser, when clicking to mount a CD-ROM for the first time, from a cold boot, the file browser that was launched sometimes wouldn't start in the CD-ROM's mount directory.
  • Fixed: In the file browser and the file dialog, the current directory field started off disabled (greyed-out), but changing the directory caused it to be redrawn as enabled (not greyed out). Components weren't being re-rendered when their setData() functions were called.
  • Fixed: A bug in the USB driver subsystem, in which a device disconnection could cause the USB thread to go into an infinite loop.
  • Fixed: Increased timeout values for SCSI 'start unit' commands, to support various USB-attached disks (hard disks and CD/DVD drives that need time to spin up).
  • Fixed: An IDE disk controller driver bug where an unhandled interrupt could result from selecting a nonexistent slave drive on certain controllers. Also eliminated some redundant status polling.
  • Fixed: Timing issues in the AHCI SATA driver related to CD/DVD drives.
  • Fixed: Removed kernelMalloc() usage in kernelDebug.c which could cause debugging output not to be displayed in an interrupt context.

What is new in version 0.74:

  • Added per-user home directories, under /users, which are now the default 'current directory' when the user logs in.
  • Created a new configuration file for environment variables that are set at login time, and per-user override ones in home directories.
  • Language setting is now a system-wide and per-user environment variable, that can be chosen at first boot, and in the user management tools.
  • Added Spanish and German translations for many of the user programs and GUI features.
  • Added a 'language chooser' dialog window to the window library.
  • Part of the GUI system has been re-written, including changing the 'menu' implementation from a window component into a child window.
  • GUI menus have been changed so that when the topmost menu item is selected, pressing cursor-up removes the selection.
  • The file dialog window now shows the current path the way the file browser program does.
  • Implemented mouse and keyboard threads to process input outside of the interrupt context, for improved stability.
  • The keyboard system has been redesigned, including the use of hardware-neutral (based on UEFI) scan codes and modifier flags.
  • Added typematic key repeats for USB keyboards.
  • Fortified the kernel's user management code and closed some security loopholes.
  • Added a 'deluser' command line command, as a companion to 'adduser'.
  • Modified the 'passwd' program, so that no user name argument means to assume the current user.
  • Password length checking has been added to the User Manager program.
  • The disk caching code now does more combining of cache entries for improved performance, reducing the number of disk writes.
  • Some of the kernel's memory management code has been reworked.
  • All hardware drivers that use mapped physical memory now set the memory page attributes to disable caching.
  • The installers and install file format (e.g. dist/system/install-files.*) now have a way to specify different source and destination filenames.
  • Interrupt handlers are now disallowed from allocating or freeing memory, or changing the page tables/directories.
  • Made the kernelImageLoad() "requested width" and "requested height" parameters work generically, for image types whose drivers don't support it.
  • Added 'set data' functionality to a number of the GUI components, required for support of on-the-fly language switching
  • Separated the kernel's window shell thread from the main GUI system, as a precursor to making it a userspace executable, and to facilitate per-user settings and runtime language switching.
  • Re-implemented the kernel's 'variable list' functionality, so that it uses data offsets instead of pointers to locate variables and values. This makes them easier to copy.
  • When a child process inherits an input stream, the old text attributes are now remembered, and restored when the process terminates.
  • The build system now uses a command line 'make debug' to create a debug build, which doesn't strip libraries or executables.
  • Fixed up the ctype.h functions (isalpha(), tolower(), etc) so that they use the ISO-8859-15 code page we're using everywhere else, instead of just basic ASCII.
  • Added a setenv() function to the C library.
  • Added a kernelUserExists() function (userExists() in user space).
  • Added a new include file, , that centralizes the definition of some of the basic file structure.
  • Created header files and and moved the relevent definitions from the Disk Manager and the kernel to those.
  • Added a utils/trim-whitespace script for stripping trailing whitespace from source files and whatnot.
  • Removed the big header file of PCI vendor and device codes that we were using in debug mode. Too much of a pain to edit/maintain.
  • Fixed: Moving the PS/2 mouse around during hardware initialization of its driver could cause a cascading boot failure.
  • Fixed: When there were windows on the screen, pressing ALT-TAB 2-3 times could cause a major GUI crash.
  • Fixed: When resizing images in the 'view' program, the window title bar didn't update (with the correct zoom percentage) until the window focus changed.
  • Fixed: In graphics mode, the File Browser only noticed directory changes when a file is added or removed, but not sub-directories.
  • Fixed: The interpretation of the Linux swap fileystem header.
  • Fixed: Support for using images inside of GUI buttons
  • Fixed: The internationalization library 'libintl' to allow multiple switches of the language messages at runtime.
  • Fixed: The implementation of the C library getenv() function, so that repeated calls don't leak memory.
  • Fixed: A program with no input stream could crash if it called the kernel's text input functions. Added checking in the input functions.
  • Fixed: Improved the stability of the Screenshot program.
  • Fixed: When logged in to the GUI as an unprivileged user, there were a lot of error messages stating: Cannot release system memory block from unprivileged user process.
  • Fixed: Pressing backspace at position (0,0) would cause the Edit program to crash.
  • Fixed: Clicking on the kernel binary in the file browser program would cause a crash in the kernel's runtime loader.

What is new in version 0.73:

  • This is a hardware support update and bugfix release, adding native SATA and USB CD/DVD support and a Calculator program, as well as numerous usability and reliability fixes.

What is new in version 0.72:

  • This version consists of hardware support updates and bugfixes, with particular focus on USB.
  • Support for USB 2 controllers and devices has been added.

What is new in version 0.7:

  • Updated the appearance of windows and several types of widgets.
  • Added JPEG image format support.
  • Added image resizing code.
  • Added 64-bit disk support.
  • Added UDF (DVD-ROM) filesystem support.
  • Added GPT disk label support to the kernel and to the Disk Manager program.
  • Included a quantity of new icons based on contributions provided by Leency, including the folder icon, and all of the file browser icons for different file types.
  • Implemented keyboard navigation of the GUI menus using 'Alt' to activate them, and the cursor and 'Enter' keys to navigate and select.
  • Alt-Tab now raises the root window's 'window' menu for keyboard navigation between open windows, in a way somewhat analogous to the way Windows and other GUIs do it.
  • Created new icons for the 'cal' (Calendar), 'mines', and 'snake' programs, as well as for the 'lsdev' (Devices), 'install', and 'users' (User Manager) administration programs.
  • Added loader file class support for the ability to recognise GIF and PNG images, Zip, Gzip, and Ar archives, and PDF and HTML documents. Also added file browser icons for PDF, HTML and archive files.
  • Designed and implemented a new proprietary font file format that enables sparsely-mapped, bitmapped fonts. Added a 'fontutil' utility program for editing and managing the new format.
  • New splash image for the 0.7x series.
  • New default background pattern wallpaper image, and three additional, full-sized ones.
  • Redesigned the 'bangicon', 'infoicon', and 'questicon' images.
  • Changed the visual effect which clicking on, or dragging icons. Instead of reverse-video (xor), the icons now tint yellow. Additionally, when dragging icons, the icon image now appears instead of a box outline.
  • Changed the way icon text is drawn, so that it no longer has a solid box behind it, but instead has a little drop shadow. Icon components are now optionally focus-able, enabling keyboard navigation of (for example) the desktop icons, or the icons in the shutdown program
  • Implemented image alpha channels and blending, with support for resizing
  • Added support for reading monochrome windows bitmap (.bmp) images.
  • Added support for some new (non-4:3 aspect) graphics modes.
  • Implemented horizontal window scroll bars.
  • Added a 'divider' window component, for placing simple little lines in a window. Useful for separating sections of components.
  • Window components can now be created with a flag to suppress the use of scroll bars.
  • Improved the IDE driver so that it can detect and operate multiple controllers, correctly use PCI I/O port remappings, and PCI interrupts, as well as adding improved support for things like backwards-compatible SATA disks/controllers.
  • Added initial, very basic detection of AHCI SATA controllers (operating in native AHCI mode) and their disks.
  • Reimplemented the kernel API interface. It now supports variable-sized arguments and return values, and does checking on argument types and values (for example user vs. kernel pointers, NULL values, etc).
  • Reimplemented the kernel's file stream subsystem for character-based file I/O as a simple buffered mechanism with a file pointer, instead of using the kernel's streams.
  • Added an 'I/O ready' state to the multitasker, so that processes waiting for (for example) disk I/O can go into a 'waiting' state and be awoken as soon as possible when the I/O arrives, rather than polling for interrupts as they had been doing previously. The 'idle thread' now loops through the process list, looking for any I/O-ready processes and yields its timeslice when it finds one. The scheduler gives such processes high priority.
  • Added more efficient power management, idling the processor during spare cycles.
  • Moved common keyboard functionality out of the drivers and into the abstraction layer, with an interface for handling of specific keyboard 'special' events such as PrtScn or Ctrl-Alt-Del.
  • Added basic internationalization library support (libintl), modeled on the GNU gettext system.
  • Added 32-bit CRC calculation to the kernel.
  • Added RAM disk support, courtesy of contributions from Davide Airaghi.
  • Implemented 'lazy' FPU context saving; the context is only saved or restored if a different process tries to use it.
  • Added new keyboard mappings: French, Belgian, and Spanish.
  • Keyboard mappings are now stored in files, rather than hardcoded in the kernel. The 'keymap' (Keyboard Mapping) program has been enhanced to facilitate the editing and saving of new keymaps. In addition, the file browser will now use it to open keymap files when they're clicked.
  • Added a new configuration file /system/config/mount.conf containing variables for specifying mount points of filesystems (like Unix fstab) and whether or not to auto-mount them. The 'mount' and 'computer' programs use the file (as well as the kernel's automounting), and there is also a new 'filesys' program in the Administration window for editing it.
  • Added some extra error checking in the filesystem detection code.
  • The FAT boot sector now copies the partition table entry pointed to by the SI register, so that it is in a known/safe location for passing off in turn to the OS loader.
  • Added right-click context menus to the disk icons in the computer browser.
  • The menu currently contains 'Browse', 'Mount as...', 'Unmount', and 'Properties' choices.
  • The computer browser now shows the filesystem label, if applicable, in its icon text.
  • When a wallpaper image is chosen, it is now automatically resized to fit the the client area of the window.
  • When displaying an image, the 'view' program now scales large images down by default so that they use no more than 2/3 of the screen.
  • The 'view' program now has a right-click context menu to zoom in and out on images, or show them actual size.
  • The 'disprops' (Display Settings) program has been reorganized, and now shows a thumbnail preview of the selected background wallpaper image.
  • Added an option to the windowFileDialog to show image file thumbnail previews.
  • The 'imgboot' program now has 'run' as the default selection, instead of 'install'
  • Added locking to the kernel's stream functions.
  • Added kernel logging of the OS loader's hardware info structure.
  • Added a 'model' string field to the kernel and user disk structures.
  • Window components now receive mouse enter/exit events.
  • Window components can now have custom mouse pointers, as windows do.
  • Added mouse pointers that indicate window resizing, and they are now switched to automatically when passing over window borders.
  • New default desktop color that goes better with the splash image
  • The window shell now uses the foreground color for the root window menu, instead of the desktop color (this way there's a contrast).
  • The foreground, background, and desktop colors are no longer specified exclusively in the kernel's configuration file. They are still there as default values for boot time, but additional color settings are specified in the window configuration file, and those override the kernel ones when they're available.
  • Added windowNewThumbImage() and windowThumbImageUpdate() functions to the window library. These can be used to create a thumbnail-sized window image object from an image file name.
  • Added a kernelFileGetFullPath() function (userspace fileGetFullPath) that will return the full path+name of a file referenced by a file structure.
  • The kernelFontLoad() (userspace fontLoad) function will now search the system's font directory (/system/fonts) for a font file, so it's not necessary to pass a complete pathname.
  • Removed /system/mount directory, as it wasn't being used.
  • The kernelFileFind() (userspace fileFind) function now acccepts a NULL file structure pointer, for instances in which the caller is really only interested in whether the file exists.
  • The windowFileDialog window library code now interprets a non-empty fileName argument as a value to show by default in the file name field. Additionally, the file name field no longer shows the fully-qualified names of files, just the short names.
  • Added a windowNumberDialog to the userspace window library, for requesting the user to enter a number value, and providing a graphical slider widged for setting the value with the mouse.
  • The boot menu installer program 'bootmenu' now checks for previous installations and remembers the old entries.
  • The 'imgboot' program now checks for the presense of the 'install program before querying about whether to install.
  • The 'iconwin' program now skips any entry whose icon is missing.
  • Reduced the padding values of the text area in the 'lsdev' (Devices) program. Also fixed it so that it doesn't scroll down and then back up again while it's visible.
  • The kernel configuration reader/writer functions have been augmented with get/set/unset convenience functions for quickly getting or changing individual configuration values from files.
  • Removed the title bar from the 'clock' program.
  • The 'window' (Command Window) program has been renamed 'cmdwin'.
  • Changed the runtime program name of the 'fdisk' program from "Visopsys Disk Manager" to just "Disk Manager".
  • Implemented proper stack backtraces for help with debugging. Walks the stack frame, uses the process symbol table, etc. Used by the exception handler and by calling kernelStackTrace().
  • Added a kernelDebugHexDwords() function for doing simple hex dumps of dword-oriented memory such as stacks.
  • Added a stack debugging output function kernelDebugStack().
  • Added a 'hexdump' command for examining the contents of binary files.
  • Added a 'Details' button to the kernel error dialog window, which brings up a dialog showing process debugging info and a stack trace.
  • Added a kernelRealloc() function like the C library realloc().
  • Added a generic kernelImageCopy() function which is exported to userspace as imageCopy().
  • The window canvas component now resizes itself properly, using the image resizing function.
  • Added a kernelDebugBinary() function for doing simple binary dumps.
  • Added the -fno-stack-protector argument to Makefile.include so we can link using gcc 4.1.3 (Ubuntu 7.10, etc).
  • Added tests for since and cosine calculation to the 'test' program, and made both do 'double' calculations, and some random ones also.
  • Added an fabsf() function to the C library.
  • Added a getenv() function to the C library.
  • Added _dbl2str() and _flt2str() C library functions for converting doubles and floats to strings, respectively, and added %f format specifier support to the _xpndfmt() function (used by the printf family of functions).
  • Added an fls() C library function and fixed up ffs().
  • Added a kernel API function kernelFileSetSize(), a driverSetBlocks() filesystem driver function for the back end, and ftruncate() and truncate() C library functions for the front end.
  • Added a sleep() C library function.
  • Added a strtok() C library function.
  • Added and exported a kernel API function randomBytes() for filling a buffer with random data.
  • Exported the kernelWindowComponentUnfocus() function via the kernel API.
  • Added a kernelDebugError() macro that reports errors only when debugging is turned on on. Replaces several locally-defined debugError() macros in drivers, etc.
  • Added a new 'label' field to the kernel's generic logical disk filesystem structure. The filesystem drivers fill it in, where applicable.
  • Added mouse support for scroll wheels.
  • Window event streams are now just plan kernel streams with wrapper functions that read or write only complete events -- the way they were originally intended to be.
  • The 'mines' game map now stays on the screen after the game, so you can have a look at it.
  • Fixed the cos(), cosf(), sin(), and sinf() functions so that they work periodically (i.e. for larger radians values that are greater than (PI * 2).
  • Exported the kernelPageGetPhysical() function to userspace programs as pageGetPhysical()
  • The multitasker now uses system timer mode 3
  • Added a sys/ascii.h include file to include definitions of commonly-used character codes.
  • Fixed: The OS loader could hang during disk detection (divide by zero error) if the BIOS 'get drive parameters' function returned success despite there being no such drive.
  • Fixed: The PS/2 mouse driver has been reworked to deal properly with mouse interrupts from various types of mouse hardware.
  • Fixed: Clicking outside of a context menu could fail to erase the menu if there were no other focusable components.
  • Fixed: After a window relayout, the mouse pointer was not being properly redrawn.
  • Fixed: Resizing any window to a larger size in a vertical direction caused the window thread to generate a divide-by-zero exception
  • Fixed: The C library's dirname() function didn't work correctly for items in the root directory.
  • Fixed: The C library's fread() and fwrite() functions were returning negative error codes as return values. They now return a size_t of the number of items read/written, and any error is in errno.
  • Fixed: The C library's strcmp() and strncmp() functions were not dealing gracefully with NULL pointers, and the strncmp() function was returning nonstandard result codes.
  • Fixed: The kernel's kernelFileStreamRead function was overwriting properly-sized buffers by 1 byte, causing buffer overflows.
  • Fixed: Opening an existing file stream in read/write mode (using fopen() or kernelFileStreamOpen()) would cause the kernel to seek to the end of the file for writing, but begin reading at the beginning of the last file block. Now all opens begin at offset 0 unless they're write-only.
  • Fixed: The FAT filesystem driver no longer sets the size of the file to a multiple of the block (cluster) size on every write. Only if the number of blocks changed.
  • Fixed: The access mode flags in unistd.h were not bitwise-exclusive.
  • Fixed: open.c did not handle access mode flags correctly and was returning errno rather than -1 on error.
  • Fixed: Before multitasking was enabled, printing debug messages could crash because it printed the current process name without checking to see whether there *is* a current process.
  • Fixed: When a windowTextArea was being detroyed, it was not resetting the text input and output streams of the process in the multitasker.
  • Fixed: Intensive floating point operations (for example when displaying JPEGs or resizing images) could cause a system crash. The exception entry end exit macros were incorrect.
  • Fixed: The _xpndfmt() code used for printf-style format strings was initializing a 'double' type unnecessarily, causing any attempt to print things inside the FPU exception handler to blow up.
  • Fixed: The sliders of the color choosers (e.g. in the display settings program) were 'backwards' in the sense that they should decrease to the left and increase to the right, intuitively.
  • Fixed: Clicking on a filename with embedded spaces failed to open the file in the file browser, because it wasn't quoting the name.
  • Fixed: The kernelWindowLayout() function now properly lays out and resizes the window, particularly if it's already been laid out previously.
  • Fixed: A bug with mixing types in the sinf() and cosf() functions could cause floating point operations to get into an endless loop of "device not available" exceptions.
  • Fixed: Booting was failing on Virtual PC. VPC does not properly support the IA-32 architecture's "nested task" concept. The multitasker no longer uses interrupt returns and nested tasks -- all task switches are done with far calls. Mouse and keyboard still don't work properly in VPC.
  • Fixed: Text console error messages about not being able to find mouse pointer images.
  • Fixed: The 'cdrom' program was crashing with a page fault during device scanning.
  • Fixed: A kernel error message was showing in the console log when there was no boot splash image (a la Partition Logic) and the initialization code was trying to free the unallocated memory.
  • Fixed: The parititon diagram in the Disk Manager was showing extra border lines when clicked, that didn't appear until moused over and made stranger-looking by the phantom redrawing of invisible menu items at the same theoretical coordinates that caused them to be discontiguous. The superclass image component was unhelpfully drawing its border when focused.
  • Fixed: Detecting USB mice and keyboards at boot time could fail and prevent other devices such as PS/2 mice and keyboards from working properly.
  • Fixed: When using the 'disprops' program to enable the clock on the desktop, clicking OK after checking the box caused a page fault.
  • Fixed: When closing the console window opened from the command line, the following error message appeared:
  • "Error:console:kernelWindowContainer.c:remove(401): No such component in container"
  • Fixed: The setData() function of the kernelWindowTextArea component was inserting a NULL 1 byte past the end of the supplied data buffer
  • Fixed: Opening the edit program when running from a read-only filesystem produced the following error in the window:
  • "Error:edit:kernelFile.c:kernelFileGetTemp(3304) Filesystem is read-only"
  • Fixed: When running the edit program from a read-only filesystem, specifying a non-existent file would close the program without any message.
  • Fixed: The windowTextField widget now scrolls properly horizontally.
  • Fixed: Recursive copying of a directory into another directory using the 'cp -R' command did not create the destination top-level directory, but instead merely copied the contents of the source directory.
  • Fixed: Added a NULL-parameter check to the strlen() C library function.
  • Fixed: the multitasker's createNewProcess() no longer crashes when the caller passes a NULL parameter in the argv[] array.
  • Fixed: The native installer program created an unbootable installation when using a FAT32 filesystem type.
  • Fixed: A disk caching bug wherein the cachePrune() function could be called in the middle of a mult-part cache read or write operation.
  • Fixed: A NULL-parameter kernel API call in the 'cal' Calendar program.
  • Fixed: A page fault exception that could occur when starting the 'filebrowse' File Browser program.
  • Fixed: A bug in the C library 'memmove' function could cause a page fault when called to move 0 bytes.
  • Fixed: In the generic C library malloc() code, there was a bug that was causing partially-allocated blocks to not be split correctly. Also added a consistency-checking function.
  • Fixed: The 'edit' program was creating temporary files that weren't being deleted on exit.
  • Fixed: A number of components were creating error messages and/or crashing when certain files (such as mouse pointer images and icons) aren't present.
  • Fixed: When using a FAT12 filesystem, writing any FAT sector after the first one was causing 2 sectors to be written - resulting in a write of the last FAT sector overwriting the first root directory sector.
  • Fixed: The kernelConfigRead() function could overrun its line buffer if the line was longer then 255 bytes.
  • Fixed: The FAT filesystem driver was under-calculating the correct size for the free-cluster bitmap in the case where the data clusters were not a multiple of 8.
  • Fixed: Assorted compiler and script errors when working with the source on an Ubuntu 10.10 system.
  • Fixed: Passing an empty string to the kernelFilesystemMount() command was resulting in the new filesystem being mounted over top of the current directory.
  • Fixed: The windowIcon initializer now error checks for NULL image data.

Similar Software

SailfishOS SDK
SailfishOS SDK

17 Feb 15

polyBSD
polyBSD

2 Jun 15

LinuxConsole
LinuxConsole

20 Jan 18

FreeVPS
FreeVPS

3 Jun 15

Other Software of Developer Andy McLaughlin

Partition Logic
Partition Logic

20 Feb 15

Comments to Visopsys

Comments not found
Add Comment
Turn on images!