> This document describes the changes made to the Kernel application.

> ## Kernel 2.9

> ### Fixed errors and malfunctions

> - After a release upgrade, not all applications keys were updated. This has been corrected and all keys, as specified in the `.app` file, are now updated. This means `application:get_all_key/0,1` and `application:get_key/1,2` now returns up-to-date values also after a release upgrade.
>   (Own Id: OTP-4330)
>   (Aux Id: seq7346)

> - The options 'append' is no longer allowed together with 'compressed' to file:open/2 (previously ignored). And directories can no longer be opened with file:open/2 by using the 'compressed' flag.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4536)

> - Previously unexpected return values when calling gen_tcp:connect/3 with invalid Options values has been changed so the function exits when the option list contains invalid options, or is not a list.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4567)

> - If the shell process terminated during a user session, the shell simply freezed. Now an error message is printed out and - for local shell sessions - the shell process is restarted.
>   (Own Id: OTP-4615)
>   (Aux Id: seq7725)

> - Some more options for gen_tcp:connect/3,4, gen_tcp:listen/2, and gen_udp:open/3,4 are now documented.
>   (Own Id: OTP-4634)

> - A new class of error messages "warnings" are added. Warnings can be mapped to either error reports (the default), Info reports or a new class of reports, namely "warning reports". Non severe errors in OTP will be reported as warnings instead of forcing error reports.
>   (Own Id: OTP-4638)
>   (Aux Id: seq7788)

> - The `gen_tcp:shutdown/2` function has been added. To handle shutdown from the other side, the option `{exit_on_close, true|false}` has been added to the `inet:setops/2` function.
>   (Own Id: OTP-4664)

> - A deadlock could occur if a disk log was opened and closed by two processes at the same time.
>   (Own Id: OTP-4752)
>   (Aux Id: seq7902)

> - The BIF erlang:hibernate/3 allows a process to shrink its memory consumption while waiting for messages.
>   (Own Id: OTP-4727)

> - A code path cache has been implemented; it can be activated with code:rehash/0.
>   (Own Id: OTP-4741)

> ### Improvements and new features

> - A new function erlang:send/3 has been added to give more control to when to send if the sender risks being suspended or delayed due to automatic node connection. This function supersedes erlang:send_nosuspend/2,3, which is retained for backward compatibility, and has been upgraded to handle local processes and ports. See the documentation.

>   The function gen_server:cast/2 (and hence gen_server:abcast/2) has been corrected to not get stuck waiting for automatic node connection; if a node has to be connected for the cast to be sent, a helper process is spawned to do the send so that execution flow can return to the sender immediately.

>   The function gen_server:cast/2 has also been corrected to crash for invalid arguments.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-3968)
>   (Aux Id: Seq 4387)

> - Support for zombies has been removed. `erlang:system_flag/2` will no longer accept the `keep_zombies` argument. `process_info/2` will no longer accept the `exit` option (which was used to retrieve the exit reason for a zombie process).
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4523)

> - The `disk_log` module has been slightly changed for the purpose of reducing the risk of memory problems due to corrupt files. The `chunk` commands have been optimized by increasing the chunk size from 8 kilobytes to 64 kilobytes.
>   (Own Id: OTP-4530)
>   (Aux Id: seq7646)

> - The '{active,once}' option for `inet:setopts/2` is now documented.
>   (Own Id: OTP-4573)

> - A variant of rpc:multicall with timeout is added, and gen_server:multi_call has been fixed to discard late answers.
>   (Own Id: OTP-4586)

> - The cursor keys of VT compatible terminals works like the emacs control sequences for cursor positioning in the erlang interactive shell.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4613)
>   (Aux Id: seq7691)

> - erlang:memory/0 and erlang:memory/1 have been added. erlang:memory/[0,1] return the same type of information as c:memory/[0,1] previously did. The erlang:memory/[0,1] functions operate in constant time. c:memory/[0,1] now use erlang:memory/[0,1] and do therefore now also operate in constant time (which they previously did not).
>   erlang:memory/[0,1] return more accurate information than c:memory/[0,1] previously did.
>   For more information about erlang:memory/[0,1] see the erlang(3) man page.
>   (Own Id: OTP-4637)

> - To give applications better control of conversion of local time to UTC with respect to daylight saving time, there are two new functions: erlang:localtime_to_universaltime/2 and calendar:local_time_to_uinversal_time_dst/1. See the documentation for details.
>   (Own Id: OTP-4667)
>   (Aux Id: seq7797)

> - There is now a way to bind the erlang distribution socket to only one specific IP address on multihomed systems. Set the kernel variable 'inet_dist_use_interface' to a net address e.g '{127,0,0,1}' (bad example).
>   (Own Id: OTP-4709)
>   (Aux Id: seq7806)

> - A http state bug in inet_drv (affecting gen_tcp) has been fixed. Patch from Claes Wikström.

>   A bug in defining max number of ports has been fixed. Patch from Claes Wikström.

>   A bug in erlang:port_call/3 when calling a driver with a NULL driver struct ->call field has been fixed. Patch from Luke Gorrie.

>   There is a new function file:script/1,2 that does the same as file:eval/1 but gives a return value. For completness, file:path_script/2,3, file:eval/2 and file:path_eval/3 are also added. Suggestion from Ulf Wiger. See the documentation for details.

>   `erlang:trace/3` did no clear trace flags on processes that were exiting. This bug has now been fixed.

>   The gen_udp options `add_membership` and `drop_membership` are now allowed. Patch from Vance Shipley.

>   `gen_udp:open/1,2` with service name instead of port number now works. Patch from carlos@lfcia.org.

>   An unjustified compiler warning when using an explicit space character as pad character to `io:format/2` and similar has been removed.

>   If an illegal node name is used to start a node, now `net_kernel` fails noisily instead of just letting the node start in non-distributed mode.

>   Now `gen_server:format_status/2` also works with non-registered processes.

>   There are two new functions `erlang:list_to_integer/2` and `erlang:integer_to_list/2` that takes a number base argument. See the documentataion for details.

>   New format characters for `io:format/2` and similar are ~b, ~B, ~x, ~X, ~+ and ~#. See the documentaion for details.

>   New format characters for `io:fread/2` and similar are ~u, ~- and ~#. See the documentation for details.

>   The token scanner `erl_scan` has been rewritten to become twice as fast as before. Now, incomplete any-base numbers such as "16#" are regarded as errors instead of as zero. The allowed base number range has been extended to 2..36 instead of previously 2..16.

>   There is a new function `lists:split/2`. See the documentation.

>   For everyone that has written their own function to calculate the time difference between two `now()` calls there is now `timer:now_diff/2`. See the documentation.
>   (Own Id: OTP-4747)

> ### Known problems

> - `code:is_loaded/1` doesn't type check its arguments.
>   (Own Id: OTP-2607)

> - If more than 1024 bytes of text are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   (Own Id: OTP-3041)

> ## Kernel 2.8.0

> ### Fixed errors and malfunctions

> - A race condition in dist_ac has been removed.
>   The documentation didn't clearly state that all distributed applications depend on (at least) kernel and stdlib (kernel and stdlib should be part of "applications" in the .app file). This has now been added to the app(4) manual page.
>   The following has also been changed in the system documentation (not shipped with patches): PREVIOUSLY: When distributed applications are specified, it is advised that the sync_nodes functionality in the kernel application is used. If not used, and several nodes are started at the same time, the node that comes up first will start all applications, and the other nodes will take over the applications when they come up.
>   NOW: When distributed applications are specified, it is required that the sync_nodes functionality in the kernel application (see kernel(6)) is used to synchronize all involved nodes. If not used, the distribution mechanism for distributed applications will not function correctly.
>   (Own Id: OTP-3509)
>   (Aux Id: Seq 4408)

> - The spawn bifs didn't fail with badarg as they should if the argument list wasn't a list; instead, the spawned process immediately exited. All spawn BIFs now fail with badarg if they are passed a bad argument as argument list.
>   spawn BIFs which take funs as arguments and remote spawn BIFs could fail with other errors than badarg when passed bad arguments. All spawn BIFs now fail with badarg when they fail due to bad arguments.
>   (Own Id: OTP-4185)

> - A bug in `disk_log:unblock/1` that could cause messages to be processed in wrong order has been fixed. Write errors no longer terminate the disk log process.
>   (Own Id: OTP-4191)

> - The application module list is now properly updated after a code change.
>   (Own Id: OTP-4342)

> - A deadlock could occur if distributed disk logs were opened simultaneously on different nodes. This bug has been fixed.
>   (Own Id: OTP-4405)
>   (Aux Id: seq7275)

> - os:find_executable/1 would return wrong return values ({ok,Name} or error) if given an absolute path name instead of the documented values (Name or false).
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4476)

> ### Improvements and new features

> - The spawn_opt/[2,3,5] BIFs has been added. That is, spawn_opts that takes a fun as argument, and spawn_opts that spawn a process on a remote node.
>   (Own Id: OTP-4180)

> - The sasl application variable 'log_utc' can be set to 'true' to make ordinary sasl logs as well as report browser output appear with Universal Coordinated Time instead of local time.
>   (Own Id: OTP-4245)
>   (Aux Id: Seq7242)

> - The set_net_ticktime/[1,2] and get_net_ticktime/0 functions has been added to the net_kernel module (see net_kernel(3)) which makes it possible to change the net_tick time during operation.
>   (Own Id: OTP-4255)
>   (Aux Id: SEQ-7249)

> - There are new functions `bchunk/2,3` in the `disk_log` module that are to be used like `chunk/2,3` but return objects as binaries.
>   (Own Id: OTP-4327)

> - The loading of BEAM code at start-up of embedded systems has been optimized: if the thread pool is non-empty (see the system flag `+A` in `erl(3)`) and files are read from a file system (the default, see the value `efile` of the `-loader` flag in `erl(3)`) disk seek times have been reduced.
>   (Own Id: OTP-4372)

> - There is a new configuration parameter 'shutdown_func' to application kernel that allows you to register a function to be called when application_controller shuts down. See the man page for 'kernel'.
>   (Own Id: OTP-4424)
>   (Aux Id: seq7520)

> - The module 'erlang' is now preloaded. Customized start scripts have to be rebuilt.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-4433)

> - The option `compressed` to `file:open/2` has now been documented.
>   (Own Id: OTP-4513)

> ### Known problems

> - `code:is_loaded/1` doesn't type check its arguments.
>   (Own Id: OTP-2607)

> - If more than 1024 bytes of text are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   (Own Id: OTP-3041)

> ## Kernel 2.7

> ### Fixed errors and malfunctions

> - The undocumented and obsolete code:add_uc/1 and code:uc_dir/0 have been removed.
>   (Own Id: OTP-2933)

> - Bugs in `wrap_log_reader` have been fixed.
>   (Own Id: OTP-3736)
>   (Aux Id: OTP-3716)

> - `global:whereis_name/1` was unnecessarily inefficient.
>   (Own Id: OTP-3737)
>   (Aux Id: Seq 4935)

> - When making rpc:call to a function that in its turn spawn_linked some child process, the rpc server killed the child process when the called function returned. This is now corrected.
>   (Own Id: OTP-3769)
>   (Aux Id: OTP-3766)

> - When many nodes contacted each other at the same time, there could be long delays until for example names registered using `global` were consistent on all nodes. This has been improved substantially.
>   (Own Id: OTP-3801)
>   (Aux Id: Seq 5028, OTP-3947)

> - A close of a tcp socket could be delayed up to 5 seconds after all pending output had been sent. Now the socket is closed immediately after all pending output has been sent.
>   (Own Id: OTP-3924)
>   (Aux Id: seq 5182, OTP-3963)

> - `unlink(Pid)` used to crash when performed on a non-distributed Erlang system, when `Pid` referred to a different node (obtained via terms stored in the file system, for example). Now it returns `true`.
>   (Own Id: OTP-3964)
>   (Aux Id: Seq 5232)

> - If a directory belonging to Erlang's code path was removed, `code:which/1` could crash.
>   (Own Id: OTP-3977)
>   (Aux Id: Seq 5253)

> - When resolving a clash between registered names during the connection of two partitions, a name would be removed if one of the nodes defining the name went down during the resolution. Now the name defined by the remaining node is kept.
>   (Own Id: OTP-3999)

> - dist_ac expects that all participating nodes have the same distribution specifications, but this wasn't clearly stated anywhere in the documentation. This has now been added to the system documentation.

>   Previously when dist_ac got an "application stopped" message about an application that it didn't know of, it crashed with a badmatch. Now dist_ac stores this information instead and assumes that the distribution specification for this application will be set later (trough application:load/2).

>   A stop of a distributed application has been changed to behave in the same way on all nodes in the distributed case. An application:stop/1 followed by an application:start/1 on any node will resume operation locally.

>   Documentation for application:stop/1 has been updated to describe it's behaviour in the distributed case.
>   (Own Id: OTP-4066)
>   (Aux Id: seq7093)

> - A documentation error for the bif nodes/1 has been fixed. Under "Some equalities" it was stated that "node() = nodes(this)" which is not correct. It has now been corrected to "[node()] = nodes(this)".
>   (Own Id: OTP-4131)
>   (Aux Id: Seq7152)

> ### Improvements and new features

> - `disk_log` handles huge terms better when reading log files using `chunk/2`. Bugs in `chunk/2` and `chunk_step/3` as well as in `wrap_log_reader` have been fixed.
>   (Own Id: OTP-3716)

> - A number of bug fixes and improvements have been done to applications `runtime_tools`, `kernel` and `erts`:
>   - A read timeout no longer resets the sequential trace token. This is an incompatibility towards the previous behaviour. Use `seq_trace:set_token([])` to reset the sequential trace token.
>   - `seq_trace:get_token/0` and `seq_trace:set_token/1` now have compatible token formats.
>   - `dbg:trace_port/2` and `dbg:trace_client/2,3` now supports trace to and read from a size limited "wrap file set".
>   - `dbg:trace_port_control/1` now supports operation `get_listen_port` for the ip trace driver.
>   - New match spec functions `{is_seq_trace}` and `{get_seq_trace}` has been added to test and read the sequential trace token in match specs.
>   - New match spec functions `{get_tcw}` and `{set_tcw Value}` that reads and sets a "trace control word" in the node has been added. The "trace control word" is a word in each Erlang node of at least 24 bits. There are also enhancements of BIFs: `erlang:system_info(trace_control_word)` and `erlang:system_flag(trace_control_word, Value)` for the same purpose.
>   - A new match spec function `{silent, TrueOrFalse}` for setting a silent call trace flag per process that inhibits call trace messages, both local and global, has been added. The BIF `erlang:trace/3` has been extended to recognize the flag 'silent' to start a call trace in silent mode.
>   - Some bugs in the `dbg` module has been fixed, e.g the 'old_trace_call' flag has been removed from the 'all' flags list, and the dbg server no longer hangs if the supplied tracer fails to start.
>   - A bug in the emulator that made 'EXIT' messages from a process involved in a sequential call trace get overwritten by the sequential trace token itself has been fixed.
>   - The documentation regarding the above has been updated. Especially, the fact that the match spec function `{return_trace}` destroys the tail recursiveness of the traced function has been pointed out.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-3747)
>   (Aux Id: OTP-3592, OTP-3744)

> - `code:interpret/1`, `code:interpret_binary/3`, `code:delete_interpet/1` `code:interpeted/0` and `code:interpeted/1` have been removed since the debugger no longer needs them.
>   (Own Id: OTP-3783)

> - Hidden nodes and hidden global groups have been introduced. This makes it possible to establish hidden connections between Erlang nodes. See global_group(3), and erl(1).
>   (Own Id: OTP-3916)
>   (Aux Id: OTP-3963)

> - The flag 'procs' to erlang:trace/3 has got a slightly new behaviour: Trace tag 'spawn' has a new element, and trace tags 'register', 'unregister', and 'getting_unlinked' are new. Therefore, new and/or different trace messages will arrive to the tracer when the 'procs' trace flag is used.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-3934)
>   (Aux Id: seq5193)

> - `disk_log` caches written terms. This implies that the `close`, `lclose` and `sync` functions can return file errors. `pid2name/1` is a new debug function that given a disk log process (a pid) returns the name of the log.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   (Own Id: OTP-3952)

> - A new command line argument `-extra` has been introduced, which causes all following arguments to remain uninterpreted by Erlang; the arguments are included in the list returned by `init:get_plain_arguments/0`.
>   (Own Id: OTP-3955)
>   (Aux Id: OTP-3030, Seq 5203)

> - Ports can now be registered in the same way as processes.
>   (Own Id: OTP-3989)
>   (Aux Id: Seq5263)

> - It is now possible to have the compiler check user-defined behaviours and not only the pre-defined OTP behaviours (gen_server etc.).
>   This is done by adding a function `behaviour_info/1` to the behaviour module. `behaviour_info(callbacks)` should return a list of `{FunctionName,Arity}` which defines the callback functions the behaviour uses.
>   When a callback module with the attribute `-behaviour(Behaviour)` is compiled, its exported functions will be compared with the list returned by `Behaviour:behaviour_info(callbacks)` and a warning will be issued if any callback function is missing.
>   Note that the user must ensure that the module `Behaviour` is present at compile-time and can be found in the current code path.
>   (Own Id: OTP-4125)

> - When the emulator runs without the async thread pool, large file read and write operations are now segmented into smaller, so that other Erlang processes can run in parallel. Still, a sync or a close operation on a large file may block the emulator as before. Using the async thread pool is the only cure for that.
>   (Own Id: OTP-4144)

> ### Known problems

> - `code:is_loaded/1` doesn't type check its arguments.
>   (Own Id: OTP-2607)

> - If more than 1024 bytes of text are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   (Own Id: OTP-3041)

> ## Kernel 2.6.2

> ### Fixed errors and malfunctions

> - `inet_res:nslookup/4` has been made backwards compatible.
>   Own Id: OTP-3763
>   Aux Id: Seq 4972
> - When R6 nodes and unpatched R7 nodes are in the same network, `global:register_name` hangs. This is fixed with a patch to R7. Patched R7 nodes can communicate with unpatched R7 nodes.
>   Own Id: OTP-3714
> - A hanging bug in the protocol between dist_ac and application_controller has been fixed. It occurred when dist_ac had stopped an application with {ac_change_application_req,AppName,stop_it} and then tried to start it with {ac_change_application_req, AppName,{takeover,FromNode,RestartType}}.
>   Own Id: OTP-3773
>   Aux Id: Seq 4996
> - If a new application was added using code:replace_path/2, the code:lib_dir/1 function would fail on the new application name. This has been corrected.
>   Own Id: OTP-3780
>   Aux Id: Seq 5003
> - The internal inet_db counter next_id did not keep within the bounds [0, 65535] imposed by DNS query field width. The reply was then not recognized since the reply id was truncated to 16 bits. This bug is now fixed.
>   Own Id: OTP-3798
>   Aux Id: Seq 5001
> - The default receive buffer size for UDP has been restored to 8192 bytes, which it was before R7.
>   Own Id: OTP-3807
>   Aux Id: OTP-3797
> - gen_upd:recv/2,3 now works better. The option combination [binary, {active, false}] was broken.
>   Own Id: OTP-3823
> - A bug in efile_drv that randomly caused memory access violation when using file:get_cwd() has been fixed.
>   Own Id: OTP-3832
> - gen_tcp:connect/3,4, and gen_udp:send/4 now exits with badarg if an IP address tuple with a field integer value that is is not in the range 0 through 255 is passed as argument. Previously this caused a function clause.
>   Own Id: OTP-3836
>   Aux Id: Seq 5091
> - The function inet:gethostbyname/2,3 sometimes returned {error, timeout} when failing to lookup a name. This has been changed to the more appropriate response {error, nxdomain}.
>   Own Id: OTP-3883
> - The function inet:gethostbyname/2,3 now accepts an IP-string as the Name argument for all resolver types. This previously did not work for the built in DNS resolver, nor for the /etc/hosts file resolver.
>   Own Id: OTP-3886
> - The native version of the resolver for erlang no longer may crash the system due to external causes like catatonic DNS servers.
>   Own Id: OTP-3887
> - When a host machine was misconfigured so that inet:gethostbyname/1 returned an empty hostname for the host on which an erlang node was started, inet_config crashed with a function clause during node start on some platforms. This has now been fixed.
>   Own Id: OTP-3894
>   Aux Id: Seq 5127
> - A close of a tcp socket could be delayed up to 5 seconds after all pending output had been sent. Now the socket is closed immediately after all pending output has been sent.
>   Own Id: OTP-3963
>   Aux Id: OTP-3924

> ### Improvements and new features

> - `disk_log` handles huge terms better when reading log files using `chunk/2`. Bugs in `chunk/2` and `chunk_step/3` as well as in `wrap_log_reader` have been fixed.
>   Own Id: OTP-3716
> - A number of bug fixes and improvements have been done to applications `runtime_tools`, `kernel` and `erts`:
>   - A read timeout no longer resets the sequential trace token. This is an incompatibility towards the previous behaviour. Use `seq_trace:set_token([])` to reset the sequential trace token.
>   - `seq_trace:get_token/0` and `seq_trace:set_token/1` now have compatible token formats.
>   - `dbg:trace_port/2` and `dbg:trace_client/2,3` now supports trace to and read from a size limited "wrap file set".
>   - `dbg:trace_port_control/1` now supports operation `get_listen_port` for the ip trace driver.
>   - New match spec functions `{is_seq_trace}` and `{get_seq_trace}` has been added to test and read the sequential trace token in match specs.
>   - New match spec functions `{get_tcw}` and `{set_tcw Value}` that reads and sets a "trace control word" in the node has been added. The "trace control word" is a word in each Erlang node of at least 24 bits. There are also enhancements of BIFs: `erlang:system_info(trace_control_word)` and `erlang:system_flag(trace_control_word, Value)` for the same purpose.
>   - A new match spec function `{silent, TrueOrFalse}` for setting a silent call trace flag per process that inhibits call trace messages, both local and global, has been added. The BIF `erlang:trace/3` has been extended to recognize the flag 'silent' to start a call trace in silent mode.
>   - Some bugs in the `dbg` module has been fixed, e.g the 'old_trace_call' flag has been removed from the 'all' flags list, and the dbg server no longer hangs if the supplied tracer fails to start.
>   - A bug in the emulator that made 'EXIT' messages from a process involved in a sequential call trace get overwritten by the sequential trace token itself has been fixed.
>   - The documentation regarding the above has been updated. Especially, the fact that the match spec function `{return_trace}` destroys the tail recursiveness of the traced function has been pointed out.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3747
>   Aux Id: OTP-3592, OTP-3744
> - Hidden nodes and hidden global groups have been introduced. This makes it possible to establish hidden connections between Erlang nodes. See `global_group(3)`, and `erl(1)`.
>   Own Id: OTP-3963
>   Aux Id: OTP-3916

> ## Kernel 2.6.1 (R7B)

> ### Fixed errors and malfunctions

> - A new better and more portable hash BIF, <c>erlang:phash/2</c>, has been introduced. The <c>dets</c> module will use the <c>erlang:phash/2</c> for newly created tables. To rebuild an old table and start to use the new hash BIF, give the <c>{repair,force}</c> option to <c>dets:open_file/2</c>. See the documentation.
>   Own Id: OTP-3397
> - In OTP R7A, command line arguments could not be longer than 255 characters. This restriction has been removed again, but since the length limit on atoms is enforced more thoroughly than in earlier releases, `init:get_args/0` will fail for such arguments. A new function `init:get_plain_arguments/0` has been introduced, which returns strings, and should be used instead. The same problem with the command line flag `-s` is solved by the introduction of a new command line flag `-run` with the same semantics as `-s`, except that the user's function is called with a list of strings instead of a list of atoms.
>   Own Id: OTP-3687

> ### Improvements and new features

> - On Unix, `os:cmd/1` previously used a dedicated subprocess, which meant that calls to `os:cmd/1` were serialized. This is no longer the case. (For R7A users: the solution in R7A was too simple; compatibility with earlier releases has been restored.) The kernel configuration parameter `start_os` has been removed.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3466
>   Aux Id: seq4333
> - A new callback `Mod:prep_stop/1` has been introduced in `application`, for actions that need to be performed before the children are terminated.
>   Own Id: OTP-3590
>   Aux Id: Seq 4578
> - `disk_log`: `lclose/2` is a new function.
>   Own Id: OTP-3685
> - When supplying option {packet, PacketType} to gen_udp:open(Portnum, Options) it now exits with badarg. In previous releases this option was silently ignored, which was too forgiving since UDP datagrams are packets by definition, and hence this option was obsolete. Furthermore, the more exotic PacketType values, e.g. asn1, cdr, sunrm, fcgi, has never been implemented for UDP. Programs that supply this obsolete option to gen_udp:open/2 will probably crash when running on this release.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3690

> ## Kernel 2.6 (R7A)

> ### Known problems

> - `code:is_loaded/1` doesn't type check its arguments.
>   Own Id: OTP-2607
> - If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   Own Id: OTP-3041

> ### Fixed errors and malfunctions

> - If an error occurred when accessing a file, the file process died, and further attempts to access the file could cause the caller to hang. Now, it will no longer hang, but return `{error, terminated}`.
>   Own Id: OTP-1400
>   Aux Id: OTP-1034, OTP-2400
> - Using `gen_tcp:send` on a closed socket no longer causes the caller to hang.
>   Own Id: OTP-2714
>   Aux Id: seq 1122
> - A few problems having to do with start phases in the application controller were corrected.
>   Own Id: OTP-3380
>   Aux Id: Seq 4166
> - `net_adm:names` always returned the empty list. This is now corrected. A similar error was corrected in inet_db.
>   Own Id: OTP-3432
>   Aux Id: Seq 4274
> - `rpc:multicall` could leave a `nodedown` message in the caller's message queue under some circumstances. This has been fixed.
>   Own Id: OTP-3449
>   Aux Id: Seq 4305
> - A fix in the `disk_log` module: changing the size of a non-full wrap log could return the error `einval`.
>   Own Id: OTP-3484
>   Aux Id: seq4354, seq4259
> - After using `erlang:demonitor/1` on a remote process, a `DOWN` message would appear anyway if the remote node went down. This has been fixed.
>   Own Id: OTP-3499
>   Aux Id: Seq 4393
> - `global:register_name` and similar functions could sometimes fail to modify the names consistently on all nodes, if new nodes appeared in the network during the operation.
>   Own Id: OTP-3552
>   Aux Id: Seq 4490
> - If a partly partitioned net is brought together again, `global` could enter deadlock.
>   Own Id: OTP-3575
>   Aux Id: OTP-2766
> - In a net which had been partly partitioned and brought together again, it could happen that the name registry would remain inconsistent indefinitely.
>   Own Id: OTP-3576
> - When starting up a configured network, a deadlock could occur, especially if the nodes were much different in speed. This has been fixed.
>   Own Id: OTP-3625
>   Aux Id: Seq 4552

> ### Improvements and new features

> - When several versions of an application existed simultaneously in the lib directory, the code server did not neccessarily pick the latest version of the application case any version number was greater than 9, when in interactive mode (for instance, 1.9 was considered later that 1.10).
>   Own Id: OTP-2976
> - Documentation for the function application:get_key/1/2 has been improved.
>   Own Id: OTP-3379
>   Aux Id: seq4164
> - On Unix, `os:cmd/1` previously used a dedicated subprocess, which meant that calls to `os:cmd/1` were serialized. This is no longer the case.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3466
>   Aux Id: seq4333
> - The `disk_log` module has been improved as regards distribution. The value returned from `open/1` when opening a distributed log has been modified. The modification is incompatible with the previously returned value. Attempts to open a distributed log on a node running new code from a node running old code, and vice versa, results in a `nodedown` error message. `info/1` returns two more tags, 'node' and 'distributed'. The new function `lclose/1` closes a log on the current node. The layout of the continuation returned from `chunk{_step}` has been changed, and the new function `chunk_info/1` returns the node where chunks are read from. The new function `accessible_logs/0` returns the names of disk logs accessible on the current node.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3531
>   Aux Id: Seq 4426, Seq 4258
> - The BIF erlang:monitor(process, Proc) has been extended to accept named processes, local and remote. See the documentation for erlang:monitor/2 and erlang:demonitor/1.
>   Own Id: OTP-3657
> - The gen_ family (mostly gen_server and gen_fsm) and rpc has been rewritten to use the new BIF erlang:monitor/2 as much as possible. This should improve performance and remove some possibilities of hanging gen_server calls. In particular, gen_server:multi_call/2..4 and rpc:multi_server_call/2,3 should now never hang, at least not when all nodes are of this release. See also the documentation for gen_server and rpc.
>   Own Id: OTP-3660
> - The inet driver (inet_drv, i.e the driver for (TCP&UDP)/IP) and a lot of supporting Erlang code in the application kernel, has been replaced. The new code, courtesy of Tony Rogvall, eliminates one data relay process per socket and thereby gives a throughput boost.
>   Own Id: OTP-3661
> - For completeness, a new function rpc:nb_yield/2 has been added. See the documentation.
>   Own Id: OTP-3662
> - The `erlang:info/1` and `erlang:system_info/1` BIFs have been merged into one. The recommended way to use the combined BIF is by the name `erlang:system_info/1`, but `erlang:info/1` will also work.
>   Own Id: OTP-3669
> - There is a new os:getenv/0 function that retrieves a list of all (operating system) environment variables.
>   Own Id: OTP-3670
> - New socket options for TCP/IP sockets: 'tpkt' and 'line'. See the documentation for inet:setopts/2.
>   Own Id: OTP-3674
> - Most of the previously undocumented BIFs in the `erlang` module have been documented. Still undocumented are BIFs which are of no use in applications, for instance the set of BIFs used to implement the distribution protocol. The newly documented BIFs are:
>   `append_element/2`, `bump_reductions/1`, `display/1`, `function_exported/3`, `garbage_collect/0,1`, `is_builtin/3`, `loaded/0`, `make_tuple/2`, `md5/1`, `md5_final/1`, `md5_init/1`, `md5_update/2`, `port_close/1`, `port_command/2`, `port_connect/2`, `port_control/3`, `port_to_list/1`, `ref_to_list/1`, `system_info/1`, and `yield/0`.
>   Own Id: OTP-3675
> - The new BIF term_to_binary/2 can be used for automatically compressing the external representation of an Erlang term. The binary_to_term/1 BIF in R7 automatically recognises and decompresses such compressed terms.
>   Own Id: OTP-3676

> ## Kernel 2.4.1

> ### Fixed errors and malfunctions

> - `application_controller` could hang if application:stop/1 was called at about the same time as the application terminated.
>   Own Id: OTP-3351
>   Aux Id: Seq4092

> ### Improvements and new features

> - The functions `format_error/1`, `change_header/2` and `change_notify/3` have been added to the `disk_log` module.
>   Own Id: OTP-3297
>   Aux Id: OTP-3296, OTP-3340
> - Further changes have been made in the `disk_log` module. Proper error handling has been added. Several bugs have been fixed.
>   Own Id: OTP-3340
>   Aux Id: OTP-3297
> - The BIF `binary_to_term/1` will now ignore any garbage following the encoded term (as it used to do in versions of OTP before R3). The undocumented BIF `erlang:old_binary_to_term/1` (which is now equvivalent to `binary_to_term/1`) will be removed in a future release.
>   Own Id: OTP-3368

> ## Kernel 2.4

> ### Known problems

> - If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
>   Own Id: OTP-1400
>   Aux Id: OTP-1034
> - `code:is_loaded/1` doesn't type check its arguments.
>   Own Id: OTP-2607
> - Using `gen_tcp:send` on a closed socket causes the process to hang.
>   Own Id: OTP-2714
>   Aux Id: seq 1122
> - If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   Own Id: OTP-3041

> ### Fixed errors and malfunctions

> - Deadlock occured in global when two nodes reconnect after a connection failure because both nodes tried to set lock on the other nodes in the system.
>   This is now solved by letting only one of the reconneting nodes set the lock.
>   Own Id: OTP-3162
> - A distributed application was not marked as running when it was started. The error occurred on all nodes but the node where the application was actually started, if the application had the permit-flag set to false at boot loading.
>   Own Id: OTP-3184
> - `gen_tcp:send` did return `{error,normal}` when the connection was closed by the other end of the socket. This is now corrected so that `{error, enotconn}` or possibly `{error, econnreset}` is returned.
>   Own Id: OTP-3224
>   Aux Id: OTP-2954, OTP-3220, Seq 3804
> - The functions `file:eval/1` and `file:path_eval/2` now conform with their documentation when evaluation of an expression fails.
>   Own Id: OTP-3254
>   Aux Id: OTP-3161

> ### Improvements and new features

> - New BIFs have been introduced for spawning a process with a Fun: `spawn(Fun)`, `spawn(Node, Fun)`, and corresponding `spawn_link`, replacing previous undocumented BIFs with the same names.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3121
>   Aux Id: OTP-3141
> - Errors occurring while the `.erlang` file was executed were previously not reported in any way. Now, the first such error is reported using the error logger.
>   Own Id: OTP-3161
>   Aux Id: OTP-3254
> - The option `backtrace` to `process_info/2` returns the stack backtrace of a process, as a binary (use `binary_to_list` to expand it into a string).
>   Own Id: OTP-3180
>   Aux Id: Seq 3600
> - All kind of trace messages can now be sent to a port instead of to a process (for less performance impact). The `erlang:trace/3` BIF now accept an option to set the tracer process or port. The seq_trace:set_system_tracer/1 (for sequential tracing) function now accepts a port identifier as well as a pid.

>   There are suitable drivers that can receive trace output in the new `runtime_tools` application.
>   Own Id: OTP-3236

> - In order to support the new call tracing, several incompatible changes have been made to the trace/3 BIF.

>   The trace/3 BIF is now longer auto-imported; it must be called as erlang:trace/3 or imported.

>   The 'bifs' flag is no longer supported. Bifs can be traced as any exported function using the new call tracing (see `erlang:trace_pattern/2`).

>   The 'suspend' flag is no longer supported. Use the new `erlang:suspend_process/1` and `erlang:resume_process/1` Bifs instead.

>   The 'call' flag turns on new call tracing for a process. Use the 'old_call_trace' to turn on the old-fashioned call tracing.

>   There is no longer a restriction that process cannot trace a process that is tracing another processs. Therefore, it is possible to construct a circle of processes that are tracing each other (which is a bad idea beacuase the Erlang machine will probably crasch).

>   The trace messages from send and receive traces have been changed to make consistent with the other trace messages. Now all trace messages have the pid of the traced process in position 2 and the type of trace in position 3.

>   If timestamps are enabled, the first element of each trace message tuple will be 'trace_ts'.

>   The return value is no longer 'true', but the number of processes that matched the process argument. For instance, the return value will be '1' if an explicit Pid argument was given.
>   (*** INCOMPATIBILITY with R5B01 ***)
>   Own Id: OTP-3237
>   Aux Id: OTP-3238

> - A new kind of call tracing has been added. The new call tracing only support tracing of external function calls, but there is no need to trace-compile the modules to be traced.

>   The `erlang:trace/3` has been changed and extended to support the new call tracing. It is also possible to set the default tracer and trace flags for all new processes that are or created. There is also a new option to explicitly pass the pid of the tracer process. Also, trace messages can be sent to a port for less performance impact.

>   There are two new Bifs: `erlang:trace_pattern/2` to enable tracing on certain conditions for one or more exported functions or Bifs, `erlang:trace_info/2` to retrieve trace information about a process or exported function.
>   Own Id: OTP-3238
>   Aux Id: OTP-3237

> - EXIT codes now contains more information about where the error occured. There used to be only an indication of the current function; now the complete call chain is included in the EXIT code.

>   There are two new Bifs similar to exit/1, except that they generate information about which in function the fault occurred. The Bifs are `erlang:fault/1` and `erlang:fault/2`.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3239

> - The `disk_log` module has been improved. The new notification `{blocked_log,` Items`}` is generated when any of the functions `alog/2`, `balog/2`, `alog_terms/2`, or `balog_terms/2` is used with a log that is blocked but not queuing. The new notification `{format_external,` Items`}` is generated when `alog/2` or `alog_terms/2` is used with an internal log. The new function `info/1` returns information about a disk log. The functions `reopen/2,3`, `breopen/3`, `truncate/1,2` and `btruncate/2` can be used with wrap logs. Several bugs have been fixed.
>   Own Id: OTP-3296
>   Aux Id: OTP-3297, OTP-3308
> - The `disk_log` module has been changed according to the following. Requests to close a disk log are always granted. The disk log is unblocked if the blocking process closes the disk log. Any other process just closes the log. If a process that is linked to a disk log terminates, this is handled exactly as if the process had closed the log and then terminated. If any other process than the blocking one tries to unblock a log, `{error, {not_blocked_by_pid, Name}}` is returned. The exit messages returned by open and reopen have been changed.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3307
>   Aux Id: OTP-3308
> - The `disk_log` module has been slightly changed according to the following. `inc_wrap_file/1` sends wrap notices. `inc_wrap_file/1` and `change_size/2` return an error message if anything goes wrong, rather than terminating the log. `block/1,2`, `sync/1` and `truncate` no longer queue requests if the log is blocked with `QueueLogRecords` set to `false`. Files other than internal logs and shorter than 8 bytes are not overwritten when opening an internal log. If the process that has blocked a log tries to update the log, an error message is returned.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3308
>   Aux Id: OTP-3296, OTP-3307

> ## Kernel 2.2.1

> ### Known problems

> - If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
>   Own Id: OTP-1400
>   Aux Id: OTP-1034
> - Using `gen_tcp:send` on a closed socket causes the process to hang.
>   Own Id: OTP-2714
>   Aux Id: seq 1122
> - If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   Own Id: OTP-3041

> ### Fixed errors and malfunctions

> - global locks do now keep track of all pids that share the same lock, i.e after two set_lock and one del_lock the lock is still set.
>   Own Id: OTP-1849
> - Global may have exited if bursty nodeup/nodedowns was received to a node. This is solved now.
>   Own Id: OTP-2766
>   Aux Id: otp-2728, otp-2928
> - Changes of the kernel configuration parameter 'distributed' are now taken care of at release upgrade. Kernel will however not automatically move applications to the nodes with highest priority; this must be done manually after the release upgrade is finished (use application:takeover/2).
>   Own Id: OTP-2830
> - If a transient application exited with reason normal application_controller crashed; this malfunction is now corrected.
>   Own Id: OTP-2955
>   Aux Id: seq1445
> - If a system is started and a permanent application has erroneous environment parameters, the system should crash. This is the behaviour now, before the system only printed an error report. The system will only crash if the application is started from a boot script genrated by calling systools:make_script/1/2 If application:start/1/2 is called the behaviour is as before.
>   Note: affects the result of the systools:make_script/1/2. systools:make_script generates now a call to application:start_boot/2 instead of as prevoiusly a call to application:start/2.
>   Own Id: OTP-3002
> - applicaition:get_application(module_name) returned 'undefined' if the module_name was defined as {module_name, Vsn} in the .app-file
>   Own Id: OTP-3081
>   Aux Id: Seq 1618
> - The possible InternalStatus `stopping` was missing in the documentation for `init:get_status/0`.
>   Own Id: OTP-3096
>   Aux Id: Seq 1672
> - when opening an externally formatted disk log the header was not written to the files.
>   Own Id: OTP-3118
> - application:permit can now handle also applications which are only loaded (but not started).
>   Own Id: OTP-3119
> - When reading a wrap log and for some reason a file was missing an error was given and it was not possible to read further. Now a missing file will result only in an error log message and it is possible to continue reading the log.
>   Own Id: OTP-3136
>   Aux Id: OTP-3137
> - It is now possible to open an existing wrap log without giving the size parameter. The last given values will be used as default values.
>   Own Id: OTP-3147

> ### Improvements and new features

> - It is now possible to change the size of an open disk log. For a halt log it is always possible to increase the size, but it is not possible to decrease the size to be less than the current size of the file. For a wrap log it is always possible to increase both the size and number of files. If the max files is decreased the redundant files will be removed next time the log wraps. If the size of the files is decreased the change will not affect the logs already full. If the log size is decreased for instance to save space, the function inc_wrap_log/1 can be used to force the log to wrap.
>   Own Id: OTP-2999
>   Aux Id: OTP-2989,OTP-2990,seq 1499
> - It is possible to force the disk_log to change to next wrap log file by calling the new function disk_log:inc_wrap_log(Log). This makes the current file to be closed and the next index file is opened.
>   Own Id: OTP-3078
>   Aux Id: Seq 1607
> - The undocumented and not recommended BIFs `erlang:spawn/2` and `erlang:spawn_link/2` will disappear in OTP R6, to be replaced with a more consistent set of BIFs for spawning processes from funs.
>   Own Id: OTP-3141
>   Aux Id: OTP-3121

> ## Kernel 2.2

> - If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
>   Own Id: OTP-1400
>   Aux Id: OTP-1034
> - `code:is_loaded/1` doesn't type check its arguments.
>   Own Id: OTP-2607
> - If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
>   Own Id: OTP-3041

> ### Fixed errors and malfunctions

> - `net_adm:names` did not always return the correct result when epmd on the own host was called on Windows or Linux. This is now corrected.
>   Own Id: OTP-2851
>   Aux Id: OTP-2840
> - Some BIFs e.g `append` could during certain circumstances consume huge amounts of memory (causing the Erlang node to crash) before the garbage collector was invoked to free the unused memory. This is now corrected.
>   Own Id: OTP-2865
>   Aux Id: Seq 1337
> - When a heart command is set with `heart:set_cmd(Command)` the length is miscalculated which results in 2 garbage characters at the end of the command. This can cause the heart command to fail if the garbage characters are other chars then SPACE or NULL. This is now corrected.
>   Own Id: OTP-2903
>   Aux Id: Seq 1372
> - I thought I already had written the release note for thisx
>   Own Id: OTP-2911
>   Aux Id: Seq 1384
> - Previously `gen_tcp:accept` erroneously could return `{error,normal}`. This is now corrected.
>   Own Id: OTP-2954
>   Aux Id: Seq 1374, OTP-2904
> - A request to start a distributed application, which already was started, caused that the application controller hanged. This malfunction is now corrected.
>   Own Id: OTP-2967
>   Aux Id: Seq 1474
> - Two processes starting the same application on the same node at the same time actually started the application twice.
>   Now the systems keeps track of all the start requests and starts the application only once. The result of the start is returned to all requesters.
>   Own Id: OTP-2973
>   Aux Id: Seq 1461
> - A local application would not start when its permission was set to true if it was initially started with permission set to false.
>   Own Id: OTP-2974
> - The error returns from the functions in the `rpc` module were not consistent: if `{badrpc, {'EXIT', Reason}}` was reported for remote nodes, only `{badrpc, Reason}` was reported for the local node. Now, `{badrpc, {'EXIT', Reason}}` is reported in both cases.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-3007
>   Aux Id: OTP-2875
> - `net_adm:localhost/0` is corrected to not append a "." to the hostname if the domain is not set (i.e when the domain is the empty string).
>   Own Id: OTP-3013
>   Aux Id: Seq 1533
> - On Unix, if there were no current working directory for an Erlang node (if another Unix process has deleted the directory), the commands `c:pwd/0`, `m/0`, and `m/1` would crasch. The `pwd` has been corrected to print "Cannot determine current directory" if there are no current directory, and the other commands do not attempt to convert absolute pathnames to relative pathnames as they usually do.
>   Own Id: OTP-3015
>   Aux Id: Seq 1537
> - When starting the emulator with the `-noshell` switch, a "^R" marker was printed if reading and writing on the console was mixed. This marker is no longer printed.
>   Own Id: OTP-3085
>   Aux Id: Seq 1629

> ### Improvements and new features

> - Functions have been added to the `file` module to handle links. The `read_link_info/1` reads information about a symbolic link, and the `read_link/1` function returns what a symbolic link is actually pointing to. The `make_link` function creates a new hard link, and the `make_symlink` function creates a new symbolic link.
>   Own Id: OTP-1385
>   Aux Id: OTP-3008
> - It is now possible to reconfigure global groups. The parameter name is changed from node_groups to global_groups.
>   Own Id: OTP-2497
>   Aux Id: OTP-1559
> - `gen_udp:recv/3` has been added, in analogy with `gen_tcp:recv/3`, and `gen_udp:recv/[2,3]` are now documented.
>   Own Id: OTP-2645
> - Allowed number of files in a wrap log is increased from 255 to 65000.
>   Own Id: OTP-2748
>   Aux Id: seq 1204
> - `gen_tcp:connect/[3,4]` take the same options as `gen_udp:open/[1,2]`, in particular the `binary` option. This is not new in R5, but was left out of the documentation.
>   Own Id: OTP-2814
>   Aux Id: Seq 1250
> - The syntax of Erlang tokens has been extended to allow the use of the full ISO-8859-1 (Latin-1) character set. This is noticeable in the following ways: all the Latin-1 printable characters can be used and are shown without the escape backslash convention; atoms and variables can use all Latin-1 letters.
>   Own Id: OTP-2985
> - The disk_log wrote a header every time a log file was opened, now the header is only written once in each file.
>   Own Id: OTP-3014
>   Aux Id: Seq 1534
> - A new open mode, `append`, has been added to the `file:open/2` function.
>   Own Id: OTP-3067

> ## Kernel 2.1.1

> ### Fixed errors and malfunctions

> - `ets:file2tab` which uses `disk_log` now uses the `read_only` option to `disk_log:open` when it opens the file.
>   Own Id: OTP-1716
>   Aux Id: OTP-1765
> - All applications are now informed of all changed, new and removed configuration parameters at installation of a new release. The new call-back functions is defined as Mod:config_changed(Changed, New, Removed). Where Mod is the module defined in the .app file. Refer to the reference manual application(3).
>   Own Id: OTP-2012
> - When killing a shell in the ^G command level using the sequence "^G k", some processes associated with the shell were left running. Now, there are no extra processes left anymore.
>   Own Id: OTP-2317
> - The function `gen_tcp:controlling_process(S, NewOwner)` did hang the calling process if it was not the current owner of `S`. This is now corrected. If called by any other process than the current owner `{error, eperm}` will be returned.
>   Own Id: OTP-2321
>   Aux Id: seq 779
> - When application environment variables are given on the command line, no error message was given if the variable's value was malformed; application:get_env/2 simply returned 'undefined'. Now, application:start/1 returns an error in those cases.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-2350
>   Aux Id: OTP-2347, OTP-2348
> - If a process attempts to call erl_ddll:unload_driver/1 on a driver for which it didn't previously call erl_ddll:load_driver/2, the unloading fails. In previous release, either the result 'ok' was returned, or in certain cases the erl_ddll server crashed. Now the correct error tuple is returned.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-2568
> - Sometimes when a R3 node and a R4 node were connected, global could crash due to not checked '{badrpc,nodedown}' messages. This is now corrected.
>   Own Id: OTP-2648
>   Aux Id: Seq 987
> - The processes which controls a port corresponding to a socket is now set to priority high instead of normal to assure that e.g node-ticks between distributed nodes are sent fast enough.
>   Own Id: OTP-2709

> ### Improvements and new features

> - The documentation has been augmented with a description of the error return values from erl_ddll:load_driver/2 and erl_ddll:unload_driver/1, and the error formatting function format_error/1.
>   Own Id: OTP-2569
> - The 'backlog' option to gen_tcp:listen/2 is now documented.
>   Own Id: OTP-2674

> ## Kernel 2.1

> ### Fixed errors and malfunctions

> - For the arguments to the command-line option -s, the documentation was incorrect. It has been changed to reflect the actual behaviour, namely that all arguments to the function called by -s are passed as atoms.
>   Own Id: OTP-2087
> - When using the -boot and -config command-line options on Windows, filenames in the native Windows syntax using only backslashes didn't work -- forward slashes had to be used. Now backslashes work as well as forward slashes.
>   Own Id: OTP-2373
> - An unnecessary report to the error logger caused by a timeout from `inet:gethostbyname` and `inet:gethostbyaddr` is removed.
>   Own Id: OTP-2478

> ### Improvements and new features

> - New start type, {failover, node()}, added. Note, for compability reasons this is only valid if the new key `start_phases` is defined in the `.app`-file for the application, refer to `application (3)`. It is also possible to check the current start type by `application:start_type()`, refer to `application (3)`
>   Own Id: OTP-1504
>   Aux Id: OTP-1979, OTP-2498
> - A first increment to allow several global name spaces to exist in the same system. The Global Groups are defined in the .config file by the key '{node_groups, [{GroupName, [Node]}]}. If the node_groups-key is not defined the system behaves as before; if the Global Group service is used then it is required that all nodes in a system are defined in one. and only one, Global Group. It is not possible to mix nodes belonging to a global group and nodes not belonging to a global group in the same system, if global group functionality is used.
>   Missing functionality: Reconfiguration, at the moment it is not possible to change the configuration without restarting all nodes.
>   Own Id: OTP-1559
>   Aux Id: OTP-2497
> - Better error messages for erroneous .config file.
>   Own Id: OTP-1983
> - The functions `write_file_info/2`, `change_owner/2,3`, and `change_time/2,3` in the `file` module are now documented.
>   Own Id: OTP-2252
>   Aux Id: seq 710
> - It is now possible to synchronize the start of an application by defining a new key in the `.app` file, {start-phases, [{Phase, Args}]}. This will result that the new call back function `Mod:start_phase(Phase, Args)` is called, Mod is the module defined in the `mod` key of the application. There is also a generic help module to syncronize the start of included applications, `application_starter`. If this module is defined in the `mod` key for the top application, the included applications will be started in each start phase in the order of appearance in the `included_applications` key.
>   Own Id: OTP-2498
>   Aux Id: OTP-1504
> - It is added to the documentation of `file:list_dir/1` that the returned filenames are not sorted.
>   Own Id: OTP-2508
>   Aux Id: seq 891
> - A new key, `id`, in the application resource file (`.app`, ). It can be used to define the product identification of the application.
>   Own Id: OTP-2518
> - The description of error_handler:undefined_global_name/2 has been removed, since it's no longer called from Erlang 4.6 and later.
>   Own Id: OTP-2525
> - Sequential tracing is available in alfa status and only for JAM systems. Since it is an alpha release the programmatic interface could be slightly changed based on experience from users. The module `seq_trace` contains the interface. Sequential tracing makes it possible to trace all messages that are a direct result from one initiating message e.g. all messages in a call-setup for one connection.
>   Own Id: OTP-2527
> - It is now possible to read an application's resource file (.app) keys. New functions: application:get_all_key() application:get_all_key(Application) application:get_key() application:get_key(Application, Key)
>   Own Id: OTP-2535

> ## R3B02 (Kernel 2.0.5)

> ### Fixed errors and malfunctions

> - The description of the options `resuaddr` and `keepalive` in `inet:setopts/2` has been corrected.
>   Own Id: OTP-2223
>   Aux Id: seq 679
> - The reference manual for the `kernel` application is corrected regarding the `boot_server_slaves` variable. The value should be a list of slave IP-addresses and not a list of nodenames as stated earlier.
>   Own Id: OTP-2224
>   Aux Id: seq 680
> - `application:permit(App, false)` may hang during certain circumstances. This is corrected.
>   Own Id: OTP-2231
>   Aux Id: seq699 HA72879
> - The Erlang system did always contact the DNS server (if configured) on startup and this could cause the system to hang. This is now corrected.
>   Own Id: OTP-2308
>   Aux Id: seq 765
> - `dist_ac` could hang forever if a nodedown was received at certain times.
>   Own Id: OTP-2368
>   Aux Id: seq813

> ## R3B01 (Kernel 2.0.4)

> ### Fixed errors and malfunctions

> - The `-pa` and `-pz` options to `erl` did not add the paths to the code server when combined with the `-mode embedded` option. This is corrected.
>   Own Id: OTP-2160
>   Aux Id: seq 644

> ## R3B (Kernel 2.0.3)

> ### Fixed errors and malfunctions

> - The file:sync/1 used to crash the process for the file it was used on; this has been corrected.
>   Own Id: OTP-1778
>   Aux Id: seq379
> - os:cmd/1 used to hang if given a command containing a shell comment character, for example: os:cmd("ls #"). This has been corrected.
>   Own Id: OTP-1805
>   Aux Id: seq 385
> - The 'EXIT' reason reported from the BIF process_info/1 is corrected; it now reports 'badarg' when the argument is not a pid.
>   Own Id: OTP-1874
> - The documention for erlang:register/2 has been reworded to clarify that a registered name can be used by the send operation, rather than generally.
>   Own Id: OTP-1875
> - The call to erl_ddll:unload_driver for a statically linked in driver now returns {error,linked_in_driver}. Previously the incorrect result {error, not_loaded} was returned.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-1962
> - global:(un)register_name is changed to set lock only on the nodes known to the global_name_server.
>   Own Id: OTP-2011
> - When the `pg2` server is started and a new disk log is opened, the call to `disk_log:open` used to crash. This has been corrected.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-2028
> - A more informative error messages is displayed if you try to start an Erlang node with the same name as an existing. The message in R3A was cryptic.
>   Own Id: OTP-2032
>   Aux Id: seq 534
> - The reference manuals for modules `gen_tcp`, `gen_udp` and `inet` are corrected.
>   Own Id: OTP-2034
>   Aux Id: seq 527
> - When loading of a module fails (for instance, because of a corrupted file), the code server will print an error report which includes the name of the file. The error messages printed by the binary loader are still printed, however. In a future version, there will be ONE message printed, and it will be more informative.
>   Own Id: OTP-2049
>   Aux Id: seq 546
> - In UNIX when the resolver file (typically /etc/resolv.conf) is not found, this is not treated as an error any more. A warning is issued and this type of warning is disabled as default. The warning messages can be turned on with the kernel environment variable `inet_warnings = on`.
>   Own Id: OTP-2053
>   Aux Id: seq 552
> - The communication between distributed Erlang nodes could hang if one of the nodes suddenly dies. The cause was incomplete error handling in the inet_* modules and the inet-driver. This is corrected.
>   Own Id: OTP-2055
>   Aux Id: seq 549
> - There was a problem (in R3A) on Windows NT , that it was impossible to make contact between two Erlang nodes on the same machine if the machine was not configured to use DNS and did also not have it's own hostname in a lmhosts file. This is corrected.
>   Own Id: OTP-2061
>   Aux Id: seq 572, seq 573
> - The documentation has been updated to cover VxWorks too.
>   Own Id: OTP-2157

> ### Improvements and new features

> - The documentation for `erlang:process_info(Pid, status)` now lists the `suspended` state as a possible return value.
>   Own Id: OTP-2105
>   Aux Id: seq 601
> - The timeouts for `heart` are now configurable. The environment variable HEART_BEAT_TIMEOUT can be used to set the maximum time that heart accept without getting any heart beat message from the Erlang node. Another variable HEART_BEAT_BOOT_DELAY can be used to set the delay time before the hardware watchdog (if any) is triggered. This is used to reserve time for closing down the system in a proper way without interference from the watchdog. Both variables can have values in seconds and must be in the range 10 < x <= 65535. If the variable(s) are not set the default value is 60 seconds for both timeouts.
>   Own Id: OTP-2143
> - It is now possible to tell the Erlang node to try with `dns` even if ONLY `nis` or `nis+` and not `dns` is specified in the `/etc/nsswitch.conf` file. This can be activated with the kernel valiable `inet_dns_when_nis` set to `true`. The variable can be set in the start script or on the command line like this: `erl -kernel inet_dns_when_nis true`.
>   Own Id: OTP-2153

> ## R3A02

> ### Fixed errors and malfunctions

> - The erlang distribution did not work if the search entry in /etc/resolv.conf was missing. This is corrected.
>   Own Id: OTP-2036
>   Aux Id: seq 542
> - The required format of domain and hostnames is relaxed. Now the requirement is that the name only consists of visible characters (16#21..16#7E).
>   Own Id: OTP-2037
>   Aux Id: seq 543

> ## R3A (Kernel 2.0)

> ### Fixed errors and malfunctions

> - An application can be loaded even if it includes another application which is not yet loaded.
>   Own Id: OTP-1586
> - Now the tty is reset correctly when leaving Erlang.
>   Own Id: OTP-1654
> - disk_log always truncated internal wrap logs; this is corrected.
>   Own Id: OTP-1869
> - The call to pg2:get_closest_pid exited if the process group has no members. This is corrected.
>   (*** POTENTIAL INCOMPATIBILITY ***)
>   Own Id: OTP-1945

> ### Improvements and new features

> - Start of applications is now more asynchronous, in order to prevent deadlock if a starting application calls `application:start` and `which_applications`.
>   Own Id: OTP-1629
> - The application_controller now uses less memory for the storage of application specifications
>   Own Id: OTP-1630
> - The documentation about how to start distributed applications is improved.
>   Own Id: OTP-1631
> - Improvements in the `disk_log` module: Log name is printed from the `info` function. A Pid is deleted from log owners when the Pid dies or calls close. Reconfiguration of logs is now handled correctly.
>   Own Id: OTP-1634
>   Aux Id: OTP-1435
> - The `application_controller` is split into two processes; one that handles local applications and one that handles the distributed applications. If distributed applications are used, the configuration parameter `start_dist_ac` should be set.
>   Own Id: OTP-1636
> - The new functions pwrite and pread are added to the file module. These functions makes read and write on a specific position in a file more efficient.
>   Own Id: OTP-1640
> - The syntax of different files defined by Kernel is described in separate documents. Se the reference manual for `app(4)` and `config(4)`.
>   Own Id: OTP-2149

> ### Known problems

> - It is currently not possible to open a <c>disk_log</c> for reading only. The same limitation applies to <c>ets:file2tab</c>. We consider this to be a bug which will be fixed in a forthcoming version.
>   Own Id: OTP-1716

> ## 1 Kernel 1.3.2

> ### 1.1 Fixed Bugs and malfunctions

> - `file:stop` does not hang any more.
>   Own Id:OTP-1404
> - `net_kernel` could in some situations send two nodeup messages to the monitor processes (processes that have evaluated `net_kernel:monitor_nodes()`).
>   This problem could make `global` hang when several nodes connected.
>   Own Id:OTP-1418; OTP-1127, OTP-1412
>   Aux Id:tir-d-088
> - `net_kernel` did not send nodedown messages for allowed nodes. If net_kernel:allow(Nodes) was used, no nodedown messages at all were sent to monitor processes net_kernel.
>   nodedown messages are now sent for allowed nodes but are ignored for connection attempts from disallowed nodes.
>   Own Id:OTP-1419
> - `application_controller` had sync problems in the takeover phase when an application was remote started.
>   Own Id:OTP-1426
> - `application_controller` did sometimes report `{error,{not_started,App}}` even though the application in question has been started on another node.
>   Own Id:OTP-1454
>   Aux Id:HA52440
> - `application_controller` could hang due to a deadlock situation during startup in a distributed system.
>   Own Id:OTP-1472

> ### 1.2 Improvements and new features

> - The support for dynamic loading of drivers in module `erl_ddll` is enhanced with reference counting of loaded drivers and automatic unloading of drivers when the "owner" process terminates.
>   Own Id:OTP-1460
> - The `os` module has got 2 new functions `getenv/1` to read environment variables from the hos operating system and `find_executable/1,2` to find executable programs using a search path.
>   Own Id:OTP-1461
> - A new function `application:which_application(Module)` which returns the application that `Module` belongs to.
>   Own Id:OTP-1008

> ## 2 Kernel 1.3.1

> ### 2.1 Fixed Bugs and malfunctions

> - Malformed string/list as argument to unix:cmd/1 caused entire ERTS to crash.
>   Own Id: OTP-1384
> - It was not possible to convert a non distributed system into a distributed system as stated in the net_kernel reference manual. Note that this is not the recommended way to start a distributed system.
>   Own Id: OTP-1393
> - `net_adm:world/1` was broken on Windows NT, since it relied on `unix:cmd/1`.
>   Own Id: OTP-1397
> - The `disk_log_server` now clears it's state correctly when a disk_log process terminates.
>   Own Id: OTP-1402

> ## 3 Kernel 1.3

> ### 3.1 Improvements and new features

> - `net_ticktime` is configurable through the `kernel` application. `net_ticktime` specifies the time within which a non responding node will be considered to be down.
> - `-boot_var` flag read by `init`. This flag is used to set a path variable in the boot script. If applications will be placed under another directory than $ROOT/lib in an embedded system this flag can be used.
> - A new function for controlling execution of applications is added; `application:permit/2`. The function controls which applications are permitted to execute on the node.
> - A new configuration parameter `permissions` specifies the default permission an application has when it is loaded.
> - New functions in `application`.
>   `application:load(App, Dist)` - set (and check!) distribution configuration for an application at load time.
>   `application:get_application/0,1` - get the application of a pid.
>   Own Id: OTP-1306
> - `.config` files are now allowed to contain comments.
>   Own Id: OTP-1134
>   Aux Id: HA37561
> - It is now possible to specify more than one configuration file to `erl`, by using the command line flag `-config`.
> - The code server (module `code`) did sometimes store relative pathnames which could cause troubles in some cases. The code server is changed to always store absolute pathnames.
>   Own Id: OTP-1239
>   Aux Id: erlang/66
> - An elucidation regarding strings in the `code` module. Since the `1.1` version of the kernel application the `code` module always returns directory (and file) names as strings. See the `code(3)` manual page.
>   It is preferable that directory names are provided as strings to all functions. The possibility to provide directory names as atoms may be removed in future releases. Module names should always be given as atoms and the possibility to provide module names as strings may be removed in future releases.
>   Own Id: OTP-1186
> - `code:priv_dir/1` was very slow and is made much faster now.
>   Own Id: OTP-1339
> - The module `disk_log` is moved from `stdlib` to `kernel`, and some new functionality is added. `disk_log` supports wrap and halt logs, the size of a log is configurable, it supports different file formats, and it supports replicated logs.
>   Own Id: OTP-1305
> - The `erl_boot_server` is dynamically configurable.
>   Own Id: OTP-1275
> - The functions `add_slave/1`, `delete_slave/1` and `which_slaves/0` are added to the `erl_boot_server`.
> - New option `raw` to `file:open` and also a new variant of the function which takes a list of options. The open with an optionlist is the recommended way to open a file from no on.
>   Own Id: OTP-1242
> - New format for the `Reason` field when `{error,Reason}` is returned from functions in the `file` module. There is also new documentation about this in the reference manual.
>   Own Id: OTP-1075
> - The configuration parameter `os` is removed from `kernel.app`. The function `os:type()` is used instead.
>   Own Id: OTP-1277

> ### 3.2 Fixed Bugs and malfunctions

> - `net_adm:world()` is corrected on Windows NT.
>   Own Id: OTP-1219
> - `file:list_dir("c:")` returns "No such file..." on NT
>   Own Id:OTP-1237
> - Bad call to `c:c/1` did crash the Erlang shell. Solved by addition of a better test that a module name is correct.
>   Own Id: OTP-1256
>   Aux Id: erlang/73
> - The `rpc:cast` function was synchronous when casted function call was performed at the current node.
>   Own Id: OTP-1292

> ### 3.3 Incompatibilities with Kernel 1.1.1

> - New format for the `Reason` field when `{error,Reason}` is returned from functions in the `file` module. This is an interface change (the format of `Reason` but it will only break a minimal amount (if any) of old code since the previous format of `Reason` was more or less useless in match operations. There where also errors in the documentation and other inconsistencies with the old format.
>   The most likely places where old code needs to be adjusted is where the highlevel functions `consult`, `path_consult`, `eval` and `path_eval` in combination with a match for the result `{error,open}` is used.
>   Own Id: OTP-1075

> ### 3.4 Known bugs and problems

> -

> ## 4 Kernel 1.1.1

> ### 4.1 Improvements and new feature

> -

> ### 4.2 Fixed Bugs and malfunctions

> - `application:get_env/1` returned `undefined` for all parameters during startup of an application.
>   Own Id: OTP-1079
> - When synchronization of mandatory node fails using the `sync_nodes_mandatory` configuration parameter , the node should be takendown, but it wasn't.
>   Own Id: OTP-1083
> - Manual page for file corrected.
>   Own Id: OTP-1102
> - Attempt to start an application when already running causes error. Now `application:start/1,2` returns `{error,{already_started,Name}}` if the application is running.
>   Own Id: OTP-1111
>   Aux Id: tir-f-087, tir-d-087
> - Restart (`init:restart/0`) of system did not work after a software upgrade. Started using the now old version.
>   Own Id: OTP-1113
>   Aux Id: HA37170
> - `init:stop/0` did not work after a restart (`init:restart/0`).
>   Own Id: OTP-1117

> ### 4.3 Incompatibilities with Kernel 1.1

> -

> ### 4.4 Known bugs and problems

> -

> ## 5 Kernel 1.1

> ### 5.1 Improvements and new feature

> - Application configuration paramaters can be given from the command line (overrides the configuration file):

>       erl -Appl Key Value

> - Load applications before start. All applications (included in the boot script) are loaded before the first application is started.
> - Heart uses the hardware watchdog (Solaris), see heart(3).
> - Added `error_logger:info_msg/1,2`.
> - Support for distributed applications enhanced and documented.

> ### 5.2 Fixed Bugs and malfunctions

> - `net_adm:ping(Node)` will never return `pong` if this node is not allowed (`net_kernel:allow/1`) to connect to `Node`.
> - `net_kernel:allow/1` handles hidden nodes.

> ### 5.3 Incompatibilities with OTP P1G

> - A configuration file must have suffix .config. (For example, to use the file sys.config, erl -config ./sys is used)
> - Old boot scripts won't work - generate new with systools.
> - Added the application behaviour. Change in .app file: previously, `{start, {M, F, A}}` was specified, now `{mod, {M, A}}` should be specified, and `M:start(Type, A)` is called.
> - `code:root_dir/0`, `code:lib_dir/0`, `code:compiler_dir/0` and `code:uc_dir/0` returns a string.
> - The `error_handler` is silent, e.g. it will not write `** cannot autoload: Mod **` and `** undefined registered name: Name **` to stdout any longer.

> ### 5.4 Known bugs and problems

> -

Copyright © 1991-99 Ericsson Utvecklings AB