# Potential Incompatibilities

> This document contains a list of all potential incompatibilities between Erlang 5.2/OTP R9B and the previous version Erlang 5.1/OTP R8B, and is an extract from the release notes for the respective applications.

## Compiler

- 'try' and 'cond' are keywords in R9 and must not be used as atom names or field names in records (unless they are single-quoted). In the R9 release, the compiler options 'disable_try' and 'disable_cond' can be used to allow 'try' and 'cond' to be used as in previous releases (to allow compilation of old Erlang code).
  The 'disable_try'/'disable_cond' options will be removed in the R10 release.
  (Own Id: OTP-4464)

## Erts

- spawn_opt/4 used 0 as default value for fullsweep_after instead of the default value used by spawn/3, and spawn_link/3. This caused all processes spawned by spawn_opt/4 (e.g. all gen_servers) to allways use fullsweep if the fullsweep_after option wasn't explicitly set. spawn_opt/4 has now been changed to use the same default value as spawn/3, and spawn_link/3.
  (Own Id: OTP-4179)

- The format of the monitor messages has been changed. The `Object` field in the `{'DOWN', MonitorReference, Type, Object, Info}` messages is now always on the form `{RegisteredName, NodeName}` when `erlang:monitor/2` has been called with a registered name (see erlang(3)).
  (Own Id: OTP-4311)
  (Aux Id: Seq7326)

- Comparisons between two `port`s or between two `reference`s were previously unstable and didn't conform to the Erlang specification. Comparisons between two `pid`s didn't previously conform to the Erlang specification. The comparison between two `pid`s, `port`s, or `reference`s has therefore been changed and is now stable, and does now conform to the Erlang specification.

  Cut from the Erlang specification:
  If `t1` and `t2` are both refs, both PIDs, or both ports, then `t1` precedes `t2` if and only if either
  * `node(t1)` precedes `node(t2)`, or
  * `node(t1)` equals `node(t2)` and `t1` was created before `t2`.

  (Own Id: OTP-4511)

## Kernel

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

- 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).
  (Own Id: OTP-4476)

## Odbc

- New API that has an Erlang/OTP touch and feel instead of being a C-interface with Erlang syntax. The old interface is deprecated and will be removed in release R10.
  (Own Id: OTP-4498)

- API functions that became deprecated in version 0.9.1 has been removed.
  (Own Id: OTP-4499)

## Os_mon

- Nodename is now used as key in loadtable (os_mon mib).
  (Own Id: OTP-4501)
  (Aux Id: seq7435, seq7549, seq7596)

## Runtime_tools

- - Trace ports can now be opened on remote nodes
  - It is possible to use the local node as a "trace control node", i.e. trace only remote nodes.
  - The function `dbg:i/0` now prints information about all traced nodes
  - Added function `dbg:tracer/3` - same as `tracer/2` but on the given node
  - Added function `dbg:flush_trace_port/1` - same as `flush_trace_port/0` but on the given node
  - Added function `dbg:trace_port_control/2` - same as `trace_port_control/1` but on the given node
  - Added function `dbg:get_tracer/1` - same as `get_tracer/0` but on the given node
  - Added function `dbg:stop_clear/0` - same as `stop/0` but also clears all trace patterns
  - Added functions `ctp/0`, `ctpl/0` and `ctpg/0` - clears trace patterns on all functions
  - (Incompatible) A tracer is no longer autmatically started on the local node. I.e. to start a tracer on the local node you must explicitly call `dbg:tracer/0` or `dbg:tracer/2`.
  - (Incompatible) `dbg:ln/0` now includes the local node if it is traced
  - (Incompatible) Return values from `dbg:p/2` and `dbg:tp/x` are changed - the element `{matched,N}` is replaced by `{matched,LocalNode,N}`
  (Own Id: OTP-4346)

## Stdlib

- The undocumented and deprecated module bplus_tree in stdlib has been removed.
  (Own Id: OTP-4468)

- The deprecated module 'unix' has been removed. (Used 'os' instead.)
  (Own Id: OTP-4470)