Giter Club home page Giter Club logo

jnode's Introduction

Welcome to JNode!

Build Status

In this file, you find the instructions needed to setup a JNode development environment.

Sub-Projects

JNode has been divided into several sub-projects in order to keep it "accessible". These sub-projects are:

JNode-All The root project where everything comes together
JNode-Cli Various command line commands
JNode-Core The core java classes, the Virtual Machine, the OS kernel and the Driver framework
JNode-Distr Tools and apps needed for a JNode "distribution"
JNode-FS The Filesystems and the various block device drivers
JNode-GUI The AWT implementation and the various video & input device drivers
JNode-Net The Network implementation and the various network device drivers
JNode-Shell The Command line shell and several system commands
JNode-Sound Future work
JNode-Textui Text based AWT interface

Each sub-project has the same directory structure:

<subprj>/build All build results
<subprj>/descriptors All plugin descriptors
<subprj>/lib All sub-project specific libraries
<subprj>/src All sources
<subprj>/.classpath The eclipse classpath file
<subprj>/.project The eclipse project file
<subprj>/build.xml The Ant buildfile
<subprj>/build-tests.xml The Ant buildfile for running all tests of this subproject

Eclipse

JNode is usually developed in Eclipse. (It can be done without)

The various sub-projects must be imported into eclipse. Since they reference each other, it is advisably to import them all at the same time using Import -> Existing projects into workspace.

Building

Execute:

On Windows: build.bat cd-x86-lite
On Linux: build.sh cd-x86-lite

Or in Eclipse, execute the "cd-x86-lite" target of all/build.xml.

The build will result in the following files:

all/build/cdroms/jnode-x86-lite.iso bootable CD image
all/build/cdroms/jnode-x86-lite.iso.vmx VMWare configuration file

Running

On VMWare: Open all/build/cdroms/jnode-x86-lite.iso.vmx and click Start.
On Linux: qemu.sh

Questions

If you have any questions, please post them to the forums at www.jnode.org or to the IRC channel #[email protected]

-- The JNode Team --

jnode's People

Contributors

ewoutp avatar fduminy avatar flesire avatar hakanai avatar kamcio96 avatar lsantha avatar tmyroadctfig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jnode's Issues

Fix the VESA driver

The existing VESA driver currently rely on grub to switch to a graphic mode at boot time.

Here are some missing features :

  • list available graphic modes
  • change to another graphic mode
  • ...

Issue with AWTTest AWTDemo RandomTest

When clicking on button for RandomTest the JNode gui freeze.
java.lang.IllegalArgumentException: Cannot grab pixels is thrown
See attached screenshots.
skjermbilde 2016-01-10 kl 23 58 25
skjermbilde 2016-01-10 kl 23 59 58

org.jnode.wm.VmExit: VM exit, status: 0 may be thrown

Consider the following case:
You are running a standalone swing/awt application directly from console (eg. sconsole)
Then you are closing the application. After closing the application you press Shift-Alt-F12 to restore console.
Then you get the exception.
See attached screenshot:
If you do not close the application and press Shift-Alt-F12, no exception is thrown.
skjermbilde 2016-01-16 kl 20 54 43
skjermbilde 2016-01-16 kl 21 11 23
skjermbilde 2016-01-16 kl 21 12 18

Native2Ascii build problem

Hi,

I am trying to build JNode, and I get the following error:

javacc:
[javacc] Java Compiler Compiler Version 3.2 (Parser Generator)
[javacc] (type "javacc" with no arguments for help)
[javacc] Reading from file /home/jon/Downloads/jnode-master/builder/src/builder/org/jnode/jnasm/preprocessor/gen/JNAsmPP.jj . . .
[javacc] File "TokenMgrError.java" does not exist. Will create one.
[javacc] File "ParseException.java" does not exist. Will create one.
[javacc] File "Token.java" does not exist. Will create one.
[javacc] File "SimpleCharStream.java" does not exist. Will create one.
[javacc] Parser generated successfully.
[javacc] Java Compiler Compiler Version 3.2 (Parser Generator)
[javacc] (type "javacc" with no arguments for help)
[javacc] Reading from file /home/jon/Downloads/jnode-master/builder/src/builder/org/jnode/jnasm/assembler/gen/JNAsm.jj . . .
[javacc] File "TokenMgrError.java" does not exist. Will create one.
[javacc] File "ParseException.java" does not exist. Will create one.
[javacc] File "Token.java" does not exist. Will create one.
[javacc] File "SimpleCharStream.java" does not exist. Will create one.
[javacc] Parser generated successfully.

native2ascii:
[move] Moving 1 file to /home/jon/Downloads/jnode-master/builder/build/src/org/jnode/jnasm/preprocessor/gen
[native2ascii] Converting 1 file from /home/jon/Downloads/jnode-master/builder/build/src/org/jnode/jnasm/preprocessor/gen to /home/jon/Downloads/jnode-master/builder/build/src/org/jnode/jnasm/preprocessor/gen

BUILD FAILED
/home/jon/Downloads/jnode-master/all/build.xml:367: The following error occurred while executing this line:
/home/jon/Downloads/jnode-master/all/lib/jnode.xml:106: The following error occurred while executing this line:
/home/jon/Downloads/jnode-master/builder/build.xml:106: Error starting Sun's native2ascii:

Total time: 1 minute 8 seconds

`

The shell command 'native2ascii' seems to execute properly on my Linux install (Ubuntu 16.04).

FSFile interface is underspecified

Trying to write tests for a new implementation of FSFile it's difficult to figure out what the expected behaviour should be for various inputs.

e.g.:

  • If fileOffset < 0, should it error? With what exception?
  • If fileOffset + dest.remaining() >= getLength(), should it read the data it can, and leave the buffer position at the end, or should it error?
  • If fileOffset >= getLength(), should it just do nothing, or error? With what exception?
  • If one of the above is true, but dest.remaining() == 0, should it succeed?
  • Are there other edge cases I haven't thought of?

Small issue with the console

When a wrong command the console trows an exception. Should instead catch the exception and give a more friendly error message. See attached screenshot.
This is a regression from JNode 0.2.8
skjermbilde 2016-01-11 kl 00 11 40

Convert 3.x unit tests to 4.x structure

JNode already include junit 4 jar but most of the tests have junit 3 structure. These tests should be migrate (if it's possible) to junit 4 structure with annotations.

Modularisation topics

Hi,

I just wish I had enough time to dive into JNode topics, like when I was a kid...

With that said, I have been analysing JNode code for a while and came up with a notion of what I see that JNode needs (others might not share my opinion, but still it won't hurt to make it public, will it?)

I see JNode as a layered architecture containing the following layers (from bottom to top):

  1. the boot loader: that is GRUB with BIOS and MBR
  2. the nano kernel: that is the little assembly code in core/src/native which boots, initialises base hardware (CPU, threading, memory management, mostly) and provides the driver to load and run the Java-compiled code
  3. the VM: that is mostly Java code, with some magical additions, and a good compiler, able to translate byte codes to x86/x64 machine code
  4. the module infrastructure: that is mostly Java code, that acts like an OSGi container, only proprietary, loading JNode modules and establishing a lifecycle for them
  5. the user land: that is mostly the applications, commands, drivers, etc.

In order to scale, I would see these layers as being as independent as possible from each other, and maybe handled and evolved by independent teams. That only works if there are well-defined, well-known and published interface standards between the layers, of course.

I could go over enhancements for a long while, while others might have greater insight of some of those layers that I lack and would do a better job at providing suggestions. No matter, what I want to discuss are two specific changes I would see as greatly simplifying further developments.

a. 2-3 separation:
Currently the ant-based build process is centered around the bootimagebuilder task and the companion constant generator task that runs just before, which assembles the main binary which becomes the kernel. Inputs to that are the various jar files generated by the different ant scripts, corresponding to each pure Java module (core, drivers, fs, net, gui, etc.) as well as external dependencies, sometimes packaged as modules. But I am starting to digress.
The point to bootimagebuilder is it inspects the Java compiled code and provides a number of constants, mostly offsets into some class' binary layout, that tells where a given field can be accessed within a given object. That is mostly understandable, because there are abstractions to very low-level concepts, like processor and thread, that are actually written in Java. However, they are needed in the low-level nano kernel (layer 2) that is written in assembly language and needs those objects laid out in memory and functional way before any VM is running. So the constant generator task creates that java.inc assembly file, which the nano kernel will include and use as an input to its own compilation. And that also means, once the nano kernel is built those little magical classes and fields are carved in nano kernel stone, that is, they cannot be changed. If you for any reason get those classes changed, their offsets will be wrong in the binary nano kernel image. That creates a dependency between the nano kernel and a little part of the Java code, that poses limitations to its replacement without a rebuild. Effectively, those classes (not many, but still a handful) are part of the nano kernel, though not coded in assembly.
So, what I want to suggest is, why not do away with that? Fact is, it is not so simple. To be able to extract those constants from class files at runtime would take parts of the VM to be implemented in assembly and built into the nano kernel (some kind of reflection library in assembly, maybe). That is not the purpose of my modularisation case. But I looked into the multiboot specification and noticed there is a reasonably feasible way.
Currently the grub configuration for JNode specifies the kernel, which is this bootimagebuilder output, and also a module, which is the init jar image you choose to boot it with. So why not have the constant generator generate, instead of an assembly file, a table-like structure in a binary file (TLV encoding, maybe? -- better suggestions welcome) and load that as the first multiboot module (the init jar becomes the second)? The nano kernel would have to be modified to eliminate direct references to those constants in the assembly code and instead define specific variables to hold those, which would then be loaded from the constants module and patched in very early at runtime.
So, what does one gain from this added complexity? IMHO, the nano kernel becomes an independent portion of code, that can be separately developed and optimised to take advantage of hardware trends, added support to EFI and whatever, and even be ported to different platforms (ARM, etc.). Hand the nano kernel assembly code to the experts in assembly and free it to evolve looking towards the hardware evolution. Just make it honor the interface to the upper layer which was already there. Java folks want to add a variable to the VMThread class? ok, just regenerate the constant table and it will be reloaded with no changes to the same nano kernel already deployed.

Likewise, layer 3 can evolve independently, providing newer OpenJDK 7, 8 (maybe 9) compatibility without the need to look down to the assembly code every time a new change is built. Also, the emulator becoming a full-fledged layer 1/2/3 that runs on top of stock Java VMs and provides the same base to layers above would be a greatest achievement.

Layer 4 could evolve by providing a standard OSGi container (if at all possible the same binary that could run in any Java platform).

Layer 5 is up to the OS designers best taste and trends. (Though I would like to see some production-grade improvements in the longer term -- IPv6?)

Around and in between all these layers, lies the build system. I could call it layer 0, but it is not actually a layer. It is the glue. I would love to see that become Maven-based, with modules being downloaded off Central, as you boot a minimal init jar with networking capabilities.

These are my views on modularising JNode. If they are not all feasible or even desirable, at least I would rather have them documented and submitted to scrutiny. I suppose specification should be the first contribution towards evolving JNode.

Cheers,
Douglas

Working version of install process

There is no 'user-friendly' version of the install process. We should reactivate the install command so the user is able to install JNode on a disk (on a real or virtual machine) easily.

Enhance docs directory with documentation from website

By adding the additional documentation that's found on the website.

Current documentation on the site can be out of date or inaccurate. The site is not user friendly and has no issue tracking support. By moving documentation into the source code it provides the same level of version support and the ability for users to submit pull requests for documentation updates.

Submitting as an enhancement and working on the solution.

is JNODE Depricated?

Just that , there are no recent commits.
New to java , want to check this architecture out.

This is the greatest feat in the open source world.

Whether you are a personal learner or a professional researcher, this is the greatest gift in the open source world.
I have been studying jnode for some time.
For me, Great harvest.
Whether it's theoretical knowledge or personal thoughts.

Some key issues:
1.The currently used classLib is gnu+openjdk1.5 (1.6). And a lot of modifications and customization have been made to the library files.
2.It is impossible to migrate to openjdk11.Very, very difficult, this is a leap.Therefore, it's better to give up.

PS:
It is possible to migrate to openjdk1.8.But a lot of work needs to be done.
It is possible to migrate to maven.But a lot of work needs to be done.

Salute to the project:
A great open source project.

Salute to the author:
A great open-source contributor.

Startup class/method

I want to know, which class is the startup one. I know, that (probably) the Nano Kernel is loading JavaVM and Java classes from OpenJDK, and then starts a startup class. So where the actuall OS starts?

org.jnode.assembler.x86.InvalidOpcodeException during build

java-image:
[bootimage] JNode native compiler defaulting to 'L1A'
[bootimage] Building for CPUID
[bootimage]  name     : GenuineIntel
[bootimage]  brand    : ?
[bootimage]  family   : 0
[bootimage]  model    : 0
[bootimage]  step     : 0
[bootimage]  features : FPU,PSE
[bootimage]  raw      : 00000001 756E6547 6C65746E 49656E69 00000000 00000000 00000000 00000009
[bootimage] Compiling native kernel with JNAsm, Version 0.2.9-dev, 64 bits
[bootimage] org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:775)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:495)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.execute(AbstractBootImageBuilder.java:871)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[bootimage]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
[bootimage]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
[bootimage]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[bootimage]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
[bootimage] Caused by: org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3404)
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3389)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emitMOV(X86Core.java:969)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emit(X86Core.java:294)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.emit(X86Support.java:144)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.doAssembly(X86Support.java:110)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.assemble(X86Support.java:67)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.assemble(Assembler.java:144)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.performTwoPasses(Assembler.java:119)
[bootimage]     at org.jnode.jnasm.JNAsm.assembler(JNAsm.java:68)
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:765)
[bootimage]     ... 44 more
[bootimage] --- Nested Exception ---
[bootimage] org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3404)
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3389)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emitMOV(X86Core.java:969)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emit(X86Core.java:294)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.emit(X86Support.java:144)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.doAssembly(X86Support.java:110)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.assemble(X86Support.java:67)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.assemble(Assembler.java:144)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.performTwoPasses(Assembler.java:119)
[bootimage]     at org.jnode.jnasm.JNAsm.assembler(JNAsm.java:68)
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:765)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:495)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.execute(AbstractBootImageBuilder.java:871)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[bootimage]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
[bootimage]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
[bootimage]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[bootimage]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
[bootimage] org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:666)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.execute(AbstractBootImageBuilder.java:871)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[bootimage]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
[bootimage]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
[bootimage]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[bootimage]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
[bootimage] Caused by: org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:775)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:495)
[bootimage]     ... 43 more
[bootimage] Caused by: org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3404)
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3389)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emitMOV(X86Core.java:969)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emit(X86Core.java:294)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.emit(X86Support.java:144)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.doAssembly(X86Support.java:110)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.assemble(X86Support.java:67)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.assemble(Assembler.java:144)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.performTwoPasses(Assembler.java:119)
[bootimage]     at org.jnode.jnasm.JNAsm.assembler(JNAsm.java:68)
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:765)
[bootimage]     ... 44 more
[bootimage] --- Nested Exception ---
[bootimage] org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:775)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:495)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.execute(AbstractBootImageBuilder.java:871)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[bootimage]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
[bootimage]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
[bootimage]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[bootimage]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
[bootimage] Caused by: org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3404)
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3389)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emitMOV(X86Core.java:969)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emit(X86Core.java:294)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.emit(X86Support.java:144)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.doAssembly(X86Support.java:110)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.assemble(X86Support.java:67)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.assemble(Assembler.java:144)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.performTwoPasses(Assembler.java:119)
[bootimage]     at org.jnode.jnasm.JNAsm.assembler(JNAsm.java:68)
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:765)
[bootimage]     ... 44 more
[bootimage] --- Nested Exception ---
[bootimage] org.jnode.assembler.x86.InvalidOpcodeException
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3404)
[bootimage]     at org.jnode.assembler.x86.X86BinaryAssembler.writeMOV_Const(X86BinaryAssembler.java:3389)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emitMOV(X86Core.java:969)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Core.emit(X86Core.java:294)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.emit(X86Support.java:144)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.doAssembly(X86Support.java:110)
[bootimage]     at org.jnode.jnasm.assembler.x86.X86Support.assemble(X86Support.java:67)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.assemble(Assembler.java:144)
[bootimage]     at org.jnode.jnasm.assembler.Assembler.performTwoPasses(Assembler.java:119)
[bootimage]     at org.jnode.jnasm.JNAsm.assembler(JNAsm.java:68)
[bootimage]     at org.jnode.build.x86.BootImageBuilder.compileKernel(BootImageBuilder.java:765)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.doExecute(AbstractBootImageBuilder.java:495)
[bootimage]     at org.jnode.build.AbstractBootImageBuilder.execute(AbstractBootImageBuilder.java:871)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:416)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:394)
[bootimage]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[bootimage]     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[bootimage]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[bootimage]     at java.lang.reflect.Method.invoke(Method.java:606)
[bootimage]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[bootimage]     at org.apache.tools.ant.Task.perform(Task.java:348)
[bootimage]     at org.apache.tools.ant.Target.execute(Target.java:357)
[bootimage]     at org.apache.tools.ant.Target.performTasks(Target.java:385)
[bootimage]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[bootimage]     at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[bootimage]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[bootimage]     at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[bootimage]     at org.apache.tools.ant.Main.runBuild(Main.java:758)
[bootimage]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
[bootimage]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[bootimage]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

BUILD FAILED
/home/jan/dev/jnode/all/build.xml:530: The following error occurred while executing this line:
/home/jan/dev/jnode/all/build.xml:519: The following error occurred while executing this line:
/home/jan/dev/jnode/all/build-x86.xml:215: org.jnode.assembler.x86.InvalidOpcodeException

DialogTest throws AccessControlException

Exception details: java.security.AccessControlException: Permission "(java.lang.RuntimePermission OaccessDecklaredMembers not granted du to org,jnode,test.gui.DialogTest
See attached screenshot:
skjermbilde 2016-01-23 kl 21 01 18

AWTTest2 not found

Pressing the AWT tests and the AWTTest2 results in nothing.
Next time I get the AWTTests submenu the AWTTest entry is greyed.
When I quit the GUI the following message is displayed in the console:
Cannot find class org.jnode.test.gui.AWTTest2
See attached screenshots.
skjermbilde 2016-01-16 kl 22 23 29
skjermbilde 2016-01-16 kl 22 23 56

Issue with AWTDemo File button

When clicking on the File button the Jnode gui freeze. If I try to push another button after freezing an exception is throw. See the attached screenshots
skjermbilde 2016-01-10 kl 23 37 48
skjermbilde 2016-01-10 kl 23 39 08

FAT12

Add FAT12 write support so the FS tests do not give so much errors.

Setting Look & Feel causes some application not to start.

If I set Look & Feel to Metal Default some application will not start.
Console, Tetris and Editor in Swing Test does not show up. In addition Quit in the Exit submenu does not work.
Setting Look & Feel to the other two values gives the same result.
No exception is thrown.

Run javafx application

Hello!!!
I just work on the project to execute a JavaFX application in the platform JNode and I need a lot of help to get there!
Thank you in advance!!!

Text console destroyed after closing the AWT in qemu (vga=vmware)

When running in qemu-system-x86_64 with vga=vmware, the text console is destroyed when AWT closed.

To reproduce:

  • Run JNode in qemu with vga vmware.
  • "startawt"
  • Press Alt-F12

The console should now be visible, but has no text anymore.

Using vga std does work properly so this may be an issue in qemu's vmware implementation.

JNode hangs at boot time in Virtual Box (Mac)

Upon downloading the source and building a disk image, I launched it in my Virtual Box install on my Mac. The system boots up fine to the boot menu. No matter what option I select, it hangs on the screen indefinitely.
jnode hang
Hopefully there is a workaround, because I would love to be able to test this OS and even work on some new features.

Crowd-funding?

What about doing crowd-funding for jnode? Because this project is so awesome...

Code Restructuring/JDK8 support

Would you be opposed to someone doing code restructuring and adding support for jdk8? I believe that we could use gradle to help make the build process easier.

Issue with Editor in swing test after startawt

When trying to save a file in the Swing Editor the following Exception may be thrown:
Exception in QueueProcessor: ps2MouseDispatcher
java.security.AccessControlException: Permission "(java.awt.AWTPermission accessEventQueue" not granted
To reproduce the bug it is important to wait until the text: "Save selected file" appear.
See attached screenshots. Saving works well if done before the above message shows up.
This is a regression from JNode 0.2.8
skjermbilde 2016-01-10 kl 21 58 32
skjermbilde 2016-01-10 kl 21 59 49

Qemu on Linux fails to boot

Tried to boot JNode on Linux Ubuntu 15 and Linux Mint 9.
Both could not boot. Is there something to be done to make it recognizable by QEMU?

Default subnet mask constant is wrong for class D.

Class D addresses are used for special purpose and are not assigned to a device on a network.
These addresses are not defined by a normal subnet mask.
Because each address is individually used, it uses a 255.255.255.255 mask.

DHCP command does not work.

After correctly run 'ifconfig loopback', i tried to run dhcp command but always return the following exception.

image

Remark : Only tested with virtual environment (kvm, vmware and virtualbox).

Is anyone out there?

Hello, is this project still alive?
Are you looking for contributors?

Thank you

hello

hello i like participe in this project because i follow one year ago please somebody tell me how i can contribute in this tnanks

Build fails with Java 8

Hi there, I wanted to test this project and the initial build fails with following message:

[xxx@yyy jnode]$ ./build.sh cd-x86-lite
Buildfile: ./all/build.xml
     [echo] Setting memoryMaximumSize to 1512m

prepare:

BUILD FAILED
/home/xxx/workspace/jnode/all/build.xml:222: Java Runtime version 1.6 or 1.7 needed. Your version is: 1.8.0_51-b16

Total time: 0 seconds

With the following java-version:

[xxx@yyy jnode]$ java -version
openjdk version "1.8.0_51"
OpenJDK Runtime Environment (build 1.8.0_51-b16)
OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)

On Fedora 22 with uname -a:

Linux xxx 4.1.4-100.fc21.x86_64 #1 SMP Tue Aug 4 03:25:05 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Clarify difference between getFreeSpace and getUsableSpace

There are three methods for dealing with overall filesystem space:

/**
 * Return The total size in bytes of this file system.
 *
 * @return total size in bytes or -1 if this feature is unsupported.
 * @throws IOException if an I/O error occurs
 */
public long getTotalSpace() throws IOException;

/**
 * The total free space in bytes of this file system.
 *
 * @return total free space in bytes or -1 if this feature is unsupported
 * @throws IOException if an I/O error occurs
 */
public long getFreeSpace() throws IOException;

/**
 * The usable space of this file system.
 *
 * @return usable space in bytes or -1 if this feature is unsupported
 * @throws IOException if an I/O error occurs
 */
public long getUsableSpace() throws IOException;

It's pretty obvious what "total space" is, but the difference between the other two is less clear from the docs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.