[erlang-questions] Copying applications between different OTP versions

Kenneth Lundin <>
Mon Jun 25 09:50:25 CEST 2007


Hi,

OTP versions are backwards compatible (at least 2 major versions back)
which means for example that
Erlang code developed (compiled, tested) with R10-B can be used on
a R11B system, even without recompiling.

You are trying the other way around , i.e. running code developed with R11B
on a R10B system and that is not supported at all, it might work for some cases
but is safe.

When it comes to the Erlang distribution protocol the principle is to keep it
compatible at least 2 major releases back which means that:

An OTP R11B based node can communicate with other nodes running
OTP R10B or R9C.
The next upcoming major release, OTP R12B will be able to communicate with
R11B and R10B nodes.

/Regards Kenneth (The Erlang/OTP team at Ericsson)

On 6/24/07, Kirill Zaborski <> wrote:
> OK, I understand that.
> I installed the latest version R11B-5 on target system, made an erlang
> installation erts/bin folder copy put releases and lib folder from the
> release I made run my boot script it was made with R11B and it seems like
> libraries from R11B are not compatible with R11B-5 I receive the following
> crash:
>
> {error_logger,{{2007,6,25},{0,34,39}},"~s~n",["beam/beam_load.c(1148):
> Error loading function erl_ddll:module_info/1: op int_code_end: :\n
> exported function loaded_drivers/0 redefines BIF\n"]}
> {error_logger,{{2007,6,25},{0,34,39}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,{'EXIT',{undef,[{erl_ddll,start_link,[]},{supervisor,do_start_child,2},{supervisor,start_children,3},{supervisor,init_children,2},{gen_server,init_it,6},{proc_lib,init_p,5}]}}},{offender,[{pid,undefined},{name,ddll_server},{mfa,{erl_ddll,start_link,[]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
> {error_logger,{{2007,6,25},{0,34,39}},crash_report,[[{pid,<0.7.0>},{registered_name,[]},{error_info,{shutdown,{kernel,start,[normal,[]]}}},{initial_call,{application_master,init,[<0.5.0>,<0.6.0>,{appl_data,kernel,[application_controller,erl_reply,auth,boot_server,code_server,disk_log_server,disk_log_sup,erl_prim_loader,error_logger,file_server,file_server_2,fixtable_server,global_group,global_name_server,heart,init,kernel_config,kernel_sup,net_kernel,net_sup,rex,user,os_server,ddll_server,erl_epmd,inet_db,pg2],undefined,{kernel,[]},[application,application_controller,application_master,application_starter,auth,code,code_aux,packages,code_server,dist_util,erl_boot_server,erl_distribution,erl_prim_loader,erl_reply,erlang,error_handler,error_logger,file,file_server,old_file_server,file_io_server,prim_file,global,global_group,global_search,group,heart,hipe_unified_loader,inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,inet_hosts,inet_gethost_native,inet_tcp_dist,init,kernel,kernel_config,net,net_adm,net_kernel,os,ram_file,rpc,user,user_drv,user_sup,disk_log,disk_log_1,disk_log_server,disk_log_sup,dist_ac,erl_ddll,erl_epmd,erts_debug,gen_tcp,gen_udp,prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,inet_tcp,inet_udp,pg2,seq_trace,wrap_log_reader,zlib,otp_ring0],[],infinity,infinity},normal]}},{ancestors,[<
> 0.6.0>]},{messages,[{'EXIT',<0.8.0>,normal}]},{links,[<0.6.0>,<0.5.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,987},{stack_size,21},{reductions,2063}],[]]}
> {error_logger,{{2007,6,25},{0,34,39}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
> {"Kernel pid
> terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}
>
> So I must always have the same OTP version on development and target system?
> And then what is the reason to redistribute OTP parts with application
> releases?
> Maybe I miss some important part of release handling but at the moment it
> looks somewhat inconsistent to me.
>
> Regards,
> Kirill
>
>
> On 6/24/07, Ulf Wiger <> wrote:
> > The .rel and .boot files have path names with explicit version
> > numbers in them, so the loader will not be able to find the
> > files, if you use a boot file with a different version of OTP.
> >
> > BR,
> > Ulf W
> >
> > 2007/6/24, Kirill Zaborski < >:
> > > Do I understand right that I can not copy my application to an older OTP
> > > installation? E.g. If I make my app (boot-files and so on) with the
> latest
> > > OTP R11B-5 and the target system has R10B-10 (just a bit older than 1
> year).
> > > If I run my boot file I get
> > > {"init terminating in do_boot",{'cannot load',error_handler,get_file}}
> > >
> > > System Principles in OTP documentation uses target_system.erl but which
> is
> > > not a part of OTP and I wonder why?
> > > And also it is useful for creating target system in the same OS and what
> if
> > > I run a Windows workstation and production code should run on some kind
> of
> > > Unix?
> > > As I understand to be able to install an application I need to have
> access
> > > to releases and lib directories of Erlang system so I copy myapp.tar.gz
> and
> > > then run release_handler:unpack_release(ReleaseName)
> and
> > > release_handler:install_release(Vsn). Am I right?
> > >
> > > Regards,
> > > Kirill.
> > >
> > >
> > > _______________________________________________
> > > erlang-questions mailing list
> > > 
> > > http://www.erlang.org/mailman/listinfo/erlang-questions
> > >
> >
>
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>



More information about the erlang-questions mailing list