code: @Pure
  	public static File getUserConfigurationDirectoryFor(String software) {
  		if (software == null || "".equals(software)) { //$NON-NLS-1$
  			throw new IllegalArgumentException();
  		}
  		try {
  			final File userHome = getUserHomeDirectory();
  			final OperatingSystem os = OperatingSystem.getCurrentOS();
  			if (os == OperatingSystem.ANDROID) {
  				return join(userHome, "Android", Android.DATA_DIRECTORY, //$NON-NLS-1$
  						Android.makeAndroidApplicationName(software));
  			} else if (os.isUnixCompliant()) {
  				return new File(new File(userHome, ".config"), software); //$NON-NLS-1$
  			} else if (os == OperatingSystem.WIN) {
  				final String userName = System.getProperty("user.name"); //$NON-NLS-1$
  				if (userName != null && !"".equals(userName)) { //$NON-NLS-1$
  					return join(
  							new File("C:"), //$NON-NLS-1$
  							"Documents and Settings", //$NON-NLS-1$
  							userName,
  							"Local Settings", "Application Data", //$NON-NLS-1$ //$NON-NLS-2$
  							software);
  				}
  			}
  			return new File(userHome, software);
  		} catch (FileNotFoundException exception) {
  			//
  		}
  		return null;
  	}
docs: Replies the user configuration directory for the specified software.
  
  <p>On Unix operating systems, the user directory for a
  software is by default {@code $HOME/.software} where {@code software}
  is the given parameter (case-sensitive). On Windows&reg; operating systems, the user
  directory for a software is by default
  {@code C:<span>\</span>Documents and Settings<span>\</span>userName<span>\</span>Local Settings<span>\</span>
  Application Data<span>\</span>software}
  where {@code userName} is the login of the current user and {@code software}
  is the given parameter (case-insensitive).
  
  @param software is the name of the concerned software.
  @return the configuration directory of the software for the current user.