
 %CopyrightBegin%

 SPDX-License-Identifier: Apache-2.0

 Copyright Ericsson AB 1999-2025. All Rights Reserved.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

 %CopyrightEnd%

--------------------------------------------------------------------------------

The original JAM emulator was first implemented by Mike Williams (the
instruction set was argued out with Joe Armstrong).

The original BEAM emulator and loader were first implemented by Bogumil Hausman.
They were completely rewritten by Björn Gustavsson.

Over the years the emulator has been basically completely rewritten by
a large number of individuals. Most(?) notably Claes Wikström, Tony
Rogvall, Björn Gustavsson, Patrik Nyblom, Rickard Green, Raimo Niskanen
and Arndt Jonasson.

Marcus Arendt did the original port for Windows NT. Most of this code
was rewritten by Björn Gustavsson, Patrik Nyblom, Kenneth Lundin,
Fredrik Tillman and Mattias Nilsson.

Per Hedeland did the original port for VxWorks. This port was
improved by Peter Högfeldt, Patrik Nyblom and Patrik Winroth.

Mikael Pettersson, of the HiPE project, designed and implemented
the new 2-bit tag scheme.

The SMP support has mainly been designed and implemented by Rickard Green,
Tony Rogvall (mostly ets), Mikael Pettersson (mostly optimized synchronization
primitives, and timer thread), and Patrik Nyblom (mostly dynamic drivers, and
Windows port). Also Björn Gustavsson and Raimo Niskanen have contributed.

There are also a lot of people who have contributed smaller (and
bigger) things to the emulator and runtime system: Per Hedeland,
Peter Högfeldt, Kenneth Lundin, Fredrik Tillman, Mattias Nilsson,
Kent Boortz, Markus Torpvret, Jan-Erik Dahlin, Sebastian Strollo
and perhaps more...

Björn Gustavsson (mostly matching) and Arndt Jonasson (mostly construction)
implemented the bit syntax instructions, borrowing some code from
the original prototype implementation by Tony Rogvall and Claes Wikström.

The HiPE project (Kostis Sagonas, Mikael Petterson, Erik Johansson,
Richard Carlsson, Ulf Magnusson, Jesper Wilhelmsson) added the
hipe runtime to the Beam emulator. Björn Gustavsson helped to
integrate the hipe runtime.

Rickard Green has designed and implemented the erts_alloc framework and
memory allocators.

Per Gustafsson (and perhaps others in the HiPE group) come up with
idea for bit-level binaries and binary comprehensions. Per Gustafsson
and Björn Gustavsson implemented them in the BEAM compiler and run-time
system. Björn Gustavsson implemented the new optimizations for matching
and appending of binaries in BEAM compiler and run-time system, while
Per Gustafsson implemented the optimizations in the HiPE compiler and
HiPE run-time system.

The big heap-fragment-elimination project has been going on for many
years and several releases, and was finally finished in R12B. Suggested
by the HiPE group in order to support constant pools and possible
future GC improvements, most of the work was carried out by
Björn Gustavsson, with help from Mikael Pettersson and the HiPE group.


Original Authors and Contributors:

Mike Williams
Joe Armstrong
Bogumil Hausman
Björn Gustavsson
Claes Wikström
Tony Rogvall
Patrik Nyblom
Rickard Green
Raimo Niskanen
Arndt Jonasson
Marcus Arendt
Kenneth Lundin
Fredrik Tillman
Mattias Nilsson
Per Hedeland
Peter Högfeldt
Patrik Winroth
Mikael Pettersson
Kent Boortz
Markus Torpvret
Jan-Erik Dahlin
Sebastian Strollo
Kostis Sagonis
Erik Johansson
Richard Carlsson
Ulf Magnusson
Jesper Wilhelmsson
Jakob Cederlund
Magnus Fröberg
Per Gustafsson
Björn-Egil Dahlberg

Open Source Contributors:

Mick Dwyer
Geoff Wong
Maurice Castro
Luke Gorrie 
Shawn Pearce 
Ruslan Shevchenko <Ruslan@Shevchenko.Kiev.UA>
Tony Rogvall (at Bluetail): New faster inet_drv (R7)
			    HTTP packet mode (R8)
Sebastian Strollo (at Bluetail): poll() as alternative to select()
Mikael Pettersson (HiPE)

Leonid Timochouk <l (dot) timochouk (at) gmail (dot) com> and
Serge Aleynikov <saleyn (at) gmail (dot) com>
	then (2006) at IDT Corp.
	Wrote the original SCTP implementation, adapted by the OTP team;
	in inet_drv.c in the emulator, as well as the parts in the
	kernel application. They continue to provide patches.

Mat Hostetter at Tilera Corporation:
	Implemented ethr_atomic_cmpxchg() for all, at the time
	of writing, supported platforms and improved the process lock
	implementation by using ethr_atomic_cmpxchg() instead of
	ethr_atomic_or_old() and ethr_atomic_and_old().
