EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: EPICS release series after 7.0: 7.1 or 8.0?
From: Wang Xiaoqiang via Tech-talk <[email protected]>
To: "Johnson, Andrew N." <[email protected]>, "[email protected]" <[email protected]>
Date: Thu, 9 Jan 2020 09:47:59 +0100

Hi Andrew,

It is understandable ABI/API compatibility has never been a concern of the core developers and an extra burden with no immediate benefits. But this becomes essential for sites (increasingly) using central deployment.

If the building matrix puts such burden on users, they will likely skip many epics base releases. And then problems won't be discovered/fixed in time, which isn't helping epics base development anyway.

I assume this ABI checking can be one additional step in the CI script, using tools like abi-compliance-checker. It could then be used as a guideline in development. e.g. attached is a generated report of pvAccess library between 7.0.2 and 7.0.3.

Best
Xiaoqiang

On 1/8/20 5:55 PM, Johnson, Andrew N. via Tech-talk wrote:
Hi Lewis,

On 1/7/20 5:01 PM, J. Lewis Muir via Tech-talk wrote:
What is the planned EPICS release series after 7.0?  Will it be 7.1 or
8.0?  If it will be 7.1, is the idea that it would be like the 3.11,
3.12, 3.13, 3.14, and 3.15 series where a change in the minor number (in
a <major>.<minor>.<patch> versioning scheme) allows breaking backward
compatibility?
The next series will be 7.1. The current plan is that it will require at least C++11 support from the OS, so it won't build against VxWorks 6 or with older MS Visual Studio compilers. We don't have a branch for it or a timetable for any releases yet though, so don't expect it anytime soon.

I'm not sure what you mean by backward compatibility. The EPICS version numbers don't follow the principles of Semantic Versioning, we generally pick the next number based on what kinds of changes have been included: bug fixes and minor enhancements; new features that may require modifying clients or IOCs; or major compatibility breaks, dropping architectures etc.

EPICS has never promised binary compatibility between releases, no matter what the version number change has been, so you should /always/ rebuild everything downstream from source code after upgrading Base to a new version. We don't have the resources to do compatibility testing between binary versions, and we don't generally worry about whether changes will break the ABI when making them. For example, in the latest Base-3.15.7 and EPICS 7.0.3.1 releases the fields of some of the record types were moved around while adding record reference documentation to the dbd files, so any external device support built using earlier versions would use the wrong field offsets when accessing the record field structures.

It may be more work to rebuild everything (unless you automate; I suggest looking at Sumo), but I don't recommend gambling if you could get phone-calls at 2am when some feature of your beamline stops working after an upgrade.

I'm wishing to plan for how I name EPICS packages that I install, and
I want to name them so that they include part of the version in the
package name so that I can install them in parallel (i.e., side by
side).  This is similar to wanting to install both a Python 2 and 3
package and naming them python2 and python3, respectively, so that they
can both be installed at the same time without conflicting with each
other.

To do the same for EPICS, I'm wondering whether I need to include the
major and minor version, or just the major version in the package name.

For example, I could have packages named epics3, epics7, and epics8,
corresponding to 3.15.x, 7.x, and 8.x, but that will only work if the
3.15 series is the last supported series for the 3.x major version,
and the 7.x series are expected to not break backward compatibility
(i.e., 7.x -> 7.[x+1] does not break backward compatibility).

If the series within the 7.x series (i.e., 7.0, 7.1, 7.2, etc.) will be
allowed to break backward compatibility and will likely be supported in
parallel, then I will want to put the major and minor version into the
package name.  For example, epics315, epics70, epics71, etc.
Given what I said above you should probably include the full EPICS version number. However for any support module that is downstream of Asyn you'd need to include both the Base and Asyn version numbers in the names for those packaged modules, and unfortunately this could generate a bit of a combinatorial explosion. EPICS doesn't really make packaging binaries easy...

- Andrew

--
Complexity comes for free, Simplicity you have to work for.

Title: pvAccess: 7.0.2 to 7.0.3 compatibility report

API compatibility report for the libpvAccess.so object between 7.0.2 and 7.0.3 versions on x86_64


Test Info


Module NamepvAccess
Version #17.0.2
Version #27.0.3
Archx86_64
GCC Version4.4.7
SubjectBinary Compatibility

Test Results


Total Header Files111
Total Source Files47
Total Objects1
Total Symbols / Types330 / 196
Compatibility 90%

Problem Summary


SeverityCount
Added Symbols-13
Removed SymbolsHigh15
Problems with
Data Types
High15
Medium7
Low7
Problems with
Symbols
High2
Medium0
Low0
Problems with
Constants
Low0

Added Symbols  13 


codec.h, libpvAccess.so
namespace epics::pvAccess::detail
AbstractCodec::setRxTimeout ( bool ena )
BlockingTCPTransportCodec::setRxTimeout ( bool ena )

getgroups.cpp, libpvAccess.so
namespace epics::pvAccess
osdGetRoles ( std::string const& account, roles_t& roles )

hexDump.cpp, libpvAccess.so
namespace epics::pvAccess
operator<< ( std::ostream& strm, HexDump const& hex )

responseHandlers.h, libpvAccess.so
namespace epics::pvAccess
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid )
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid )

security.h, libpvAccess.so
namespace epics::pvAccess
PeerInfo::num_instances [data]
PeerInfo::PeerInfo [C1] ( )
PeerInfo::PeerInfo [C2] ( )
PeerInfo::~PeerInfo [D0] ( )
PeerInfo::~PeerInfo [D1] ( )
PeerInfo::~PeerInfo [D2] ( )

sharedstate.h, libpvAccess.so
namespace pvas
Operation::peer ( ) const

to the top

Removed Symbols  15 


codec.h, libpvAccess.so.6.1.2
namespace epics::pvAccess::detail
BlockingServerTCPTransportCodec::invalidSecurityPluginNameStatus [data]

hexDump.cpp, libpvAccess.so.6.1.2
namespace epics::pvAccess
hexDump ( std::string const& name, epics::pvData::int8 const* bs, int len )
hexDump ( std::string const& name, epics::pvData::int8 const* bs, int start, int len )
hexDump ( std::string const& prologue, std::string const& name, epics::pvData::int8 const* bs, int start, int len )
toAscii ( epics::pvData::int8 b )
toHex ( epics::pvData::int8 b )

logger.cpp, libpvAccess.so.6.1.2
namespace epics::pvAccess
createFileLogger ( std::string const& fname )

responseHandlers.h, libpvAccess.so.6.1.2
namespace epics::pvAccess
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )

security.h, libpvAccess.so.6.1.2
namespace epics::pvAccess
CAClientSecurityPlugin::CAClientSecurityPlugin [C1] ( )
CAClientSecurityPlugin::CAClientSecurityPlugin [C2] ( )
CAClientSecurityPlugin::INSTANCE [data]
NoSecurityPlugin::INSTANCE [data]
vtable for CAClientSecurityPlugin [data]
vtable for NoSecurityPlugin [data]

to the top

Problems with Data Types, High Severity  15 


blockingUDP.h
namespace epics::pvAccess
[+] class BlockingUDPTransport  1 

codec.h
namespace epics::pvAccess::detail
[+] class AbstractCodec  1 
[+] class BlockingServerTCPTransportCodec  1 
[+] class BlockingTCPTransportCodec  4 

remote.h
namespace epics::pvAccess
[+] class Transport  8 

to the top

Problems with Symbols, High Severity  2 


responseHandlers.h, libpvAccess.so.6.1.2
namespace epics::pvAccess
[+] ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )  1 
[+] ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )  1 

to the top

Problems with Data Types, Medium Severity  7 


codec.h
namespace epics::pvAccess::detail
[+] class AbstractCodec  1 
[+] class BlockingTCPTransportCodec  4 

responseHandlers.h
namespace epics::pvAccess
[+] class ServerChannelRequesterImpl  1 

sharedstateimpl.h
namespace pvas
[+] struct Operation::Impl  1 

to the top

Problems with Data Types, Low Severity  7 


codec.h
namespace epics::pvAccess::detail
[+] class BlockingServerTCPTransportCodec  3 
[+] class BlockingTCPTransportCodec  3 

sharedstateimpl.h
namespace pvas
[+] struct Operation::Impl  1 

to the top

Header Files  111 


allocator.h
anyscalar.h
atomic_word.h
auto_ptr.h
baseChannelRequester.h
basic_file.h
basic_string.h
basic_string.tcc
beaconEmitter.h
beaconHandler.h
beaconServerStatusProvider.h
bitSet.h
blockingTCP.h
blockingUDP.h
boost_sp_counted_base.h
byteBuffer.h
c++io.h
channelSearchManager.h
char_traits.h
client.h
clientContextImpl.h
clientFactory.h
clientpvt.h
codec.h
configuration.h
createRequest.h
deque.tcc
destroyable.h
ellLib.h
epicsEvent.h
epicsException.h
epicsMutex.h
epicsThread.h
epicsTime.h
epicsTypes.h
event.h
fairQueue.h
in.h
inetAddressUtil.h
introspectionRegistry.h
ios_base.h
iosfwd
libio.h
list.tcc
lock.h
logger.h
monitor.h
new_allocator.h
osdSock.h
osdThread.h
osiSock.h
pipelineServer.h
pipelineService.h
pthreadtypes.h
pvAccess.h
pvaConstants.h
pvaDefs.h
pvaVersion.h
pvData.h
pvIntrospect.h
pvType.h
referenceCountingLock.h
remote.h
requester.h
responseHandlers.h
rpcClient.h
rpcServer.h
rpcService.h
sched.h
security.h
securityImpl.h
serializationHelper.h
serialize.h
server.h
serverChannelImpl.h
serverContext.h
serverContextImpl.h
shared_ptr.h
sharedstate.h
sharedstateimpl.h
sharedVector.h
sockaddr.h
socket.h
status.h
stddef.h
stdexcept
stdint.h
stdio.h
stl_algobase.h
stl_bvector.h
stl_deque.h
stl_function.h
stl_iterator.h
stl_iterator_base_types.h
stl_list.h
stl_map.h
stl_multimap.h
stl_pair.h
stl_queue.h
stl_set.h
stl_tree.h
stl_uninitialized.h
stl_vector.h
stringfwd.h
thread.h
timer.h
timeStamp.h
transportRegistry.h
types.h
vector.tcc
wildcard.h

to the top

Source Files  47 


abstractResponseHandler.cpp
baseChannelRequester.cpp
beaconEmitter.cpp
beaconHandler.cpp
beaconServerStatusProvider.cpp
blockingTCPAcceptor.cpp
blockingTCPConnector.cpp
blockingUDPConnector.cpp
blockingUDPTransport.cpp
ChannelAccessFactory.cpp
channelSearchManager.cpp
client.cpp
clientContextImpl.cpp
clientFactory.cpp
clientGet.cpp
clientInfo.cpp
clientMonitor.cpp
clientPut.cpp
clientRPC.cpp
clientSync.cpp
codec.cpp
configuration.cpp
hexDump.cpp
inetAddressUtil.cpp
introspectionRegistry.cpp
logger.cpp
monitor.cpp
pipelineServer.cpp
pvAccess.cpp
pvaVersion.cpp
referenceCountingLock.cpp
requester.cpp
responseHandlers.cpp
rpcClient.cpp
rpcServer.cpp
rpcService.cpp
security.cpp
serializationHelper.cpp
server.cpp
serverChannelImpl.cpp
serverContext.cpp
sharedstate_channel.cpp
sharedstate_put.cpp
sharedstate_pv.cpp
sharedstate_rpc.cpp
transportRegistry.cpp
wildcard.cpp

to the top

Objects  1 


libpvAccess.so.6.1.2

to the top



Test Info


Module NamepvAccess
Version #17.0.2
Version #27.0.3
Archx86_64
SubjectSource Compatibility

Test Results


Total Header Files111
Total Source Files47
Total Objects1
Total Symbols / Types362 / 213
Compatibility 94.5%

Problem Summary


SeverityCount
Added Symbols-13
Removed SymbolsHigh13
Problems with
Data Types
High2
Medium0
Low5
Problems with
Symbols
High0
Medium2
Low0
Problems with
Constants
Low0

Added Symbols  13 


codec.h
namespace epics::pvAccess::detail
AbstractCodec::setRxTimeout ( bool ena )
BlockingTCPTransportCodec::setRxTimeout ( bool ena )

getgroups.cpp
namespace epics::pvAccess
osdGetRoles ( std::string const& account, roles_t& roles )

hexDump.cpp
namespace epics::pvAccess
operator<< ( std::ostream& strm, HexDump const& hex )

responseHandlers.h
namespace epics::pvAccess
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid )
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid )

security.h
namespace epics::pvAccess
PeerInfo::num_instances [data]
PeerInfo::PeerInfo [C1] ( )
PeerInfo::PeerInfo [C2] ( )
PeerInfo::~PeerInfo [D0] ( )
PeerInfo::~PeerInfo [D1] ( )
PeerInfo::~PeerInfo [D2] ( )

sharedstate.h
namespace pvas
Operation::peer ( ) const

to the top

Removed Symbols  13 


codec.h
namespace epics::pvAccess::detail
BlockingServerTCPTransportCodec::invalidSecurityPluginNameStatus [data]

hexDump.cpp
namespace epics::pvAccess
hexDump ( std::string const& name, epics::pvData::int8 const* bs, int len )
hexDump ( std::string const& name, epics::pvData::int8 const* bs, int start, int len )
hexDump ( std::string const& prologue, std::string const& name, epics::pvData::int8 const* bs, int start, int len )
toAscii ( epics::pvData::int8 b )
toHex ( epics::pvData::int8 b )

logger.cpp
namespace epics::pvAccess
createFileLogger ( std::string const& fname )

responseHandlers.h
namespace epics::pvAccess
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )
ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )

security.h
namespace epics::pvAccess
CAClientSecurityPlugin::CAClientSecurityPlugin [C1] ( )
CAClientSecurityPlugin::CAClientSecurityPlugin [C2] ( )
CAClientSecurityPlugin::INSTANCE [data]
NoSecurityPlugin::INSTANCE [data]

to the top

Problems with Data Types, High Severity  2 


codec.h
namespace epics::pvAccess::detail
[+] class AbstractCodec  1 
[+] class BlockingTCPTransportCodec  1 

to the top

Problems with Symbols, Medium Severity  2 


responseHandlers.h
namespace epics::pvAccess
[+] ServerChannelRequesterImpl::ServerChannelRequesterImpl [C1] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )  1 
[+] ServerChannelRequesterImpl::ServerChannelRequesterImpl [C2] ( TransportRegistry::shared_pointer const& transport, std::string const channelName, pvAccessID const cid, ServerChannel::shared_pointer const& css )  1 

to the top

Problems with Data Types, Low Severity  5 


codec.h
namespace epics::pvAccess::detail
[+] class BlockingTCPTransportCodec  4 

sharedstateimpl.h
namespace pvas
[+] struct Operation::Impl  1 

to the top

Header Files  111 


allocator.h
anyscalar.h
atomic_word.h
auto_ptr.h
baseChannelRequester.h
basic_file.h
basic_string.h
basic_string.tcc
beaconEmitter.h
beaconHandler.h
beaconServerStatusProvider.h
bitSet.h
blockingTCP.h
blockingUDP.h
boost_sp_counted_base.h
byteBuffer.h
c++io.h
channelSearchManager.h
char_traits.h
client.h
clientContextImpl.h
clientFactory.h
clientpvt.h
codec.h
configuration.h
createRequest.h
deque.tcc
destroyable.h
ellLib.h
epicsEvent.h
epicsException.h
epicsMutex.h
epicsThread.h
epicsTime.h
epicsTypes.h
event.h
fairQueue.h
in.h
inetAddressUtil.h
introspectionRegistry.h
ios_base.h
iosfwd
libio.h
list.tcc
lock.h
logger.h
monitor.h
new_allocator.h
osdSock.h
osdThread.h
osiSock.h
pipelineServer.h
pipelineService.h
pthreadtypes.h
pvAccess.h
pvaConstants.h
pvaDefs.h
pvaVersion.h
pvData.h
pvIntrospect.h
pvType.h
referenceCountingLock.h
remote.h
requester.h
responseHandlers.h
rpcClient.h
rpcServer.h
rpcService.h
sched.h
security.h
securityImpl.h
serializationHelper.h
serialize.h
server.h
serverChannelImpl.h
serverContext.h
serverContextImpl.h
shared_ptr.h
sharedstate.h
sharedstateimpl.h
sharedVector.h
sockaddr.h
socket.h
status.h
stddef.h
stdexcept
stdint.h
stdio.h
stl_algobase.h
stl_bvector.h
stl_deque.h
stl_function.h
stl_iterator.h
stl_iterator_base_types.h
stl_list.h
stl_map.h
stl_multimap.h
stl_pair.h
stl_queue.h
stl_set.h
stl_tree.h
stl_uninitialized.h
stl_vector.h
stringfwd.h
thread.h
timer.h
timeStamp.h
transportRegistry.h
types.h
vector.tcc
wildcard.h

to the top

Source Files  47 


abstractResponseHandler.cpp
baseChannelRequester.cpp
beaconEmitter.cpp
beaconHandler.cpp
beaconServerStatusProvider.cpp
blockingTCPAcceptor.cpp
blockingTCPConnector.cpp
blockingUDPConnector.cpp
blockingUDPTransport.cpp
ChannelAccessFactory.cpp
channelSearchManager.cpp
client.cpp
clientContextImpl.cpp
clientFactory.cpp
clientGet.cpp
clientInfo.cpp
clientMonitor.cpp
clientPut.cpp
clientRPC.cpp
clientSync.cpp
codec.cpp
configuration.cpp
hexDump.cpp
inetAddressUtil.cpp
introspectionRegistry.cpp
logger.cpp
monitor.cpp
pipelineServer.cpp
pvAccess.cpp
pvaVersion.cpp
referenceCountingLock.cpp
requester.cpp
responseHandlers.cpp
rpcClient.cpp
rpcServer.cpp
rpcService.cpp
security.cpp
serializationHelper.cpp
server.cpp
serverChannelImpl.cpp
serverContext.cpp
sharedstate_channel.cpp
sharedstate_put.cpp
sharedstate_pv.cpp
sharedstate_rpc.cpp
transportRegistry.cpp
wildcard.cpp

to the top

Objects  1 


libpvAccess.so.6.1.2

to the top






Replies:
Re: EPICS release series after 7.0: 7.1 or 8.0? (ABI) Michael Davidsaver via Tech-talk
Re: EPICS release series after 7.0: 7.1 or 8.0? Johnson, Andrew N. via Tech-talk
References:
EPICS release series after 7.0: 7.1 or 8.0? J. Lewis Muir via Tech-talk
Re: EPICS release series after 7.0: 7.1 or 8.0? Johnson, Andrew N. via Tech-talk

Navigate by Date:
Prev: Re: Can't import PyEpics on CentOS 7 Matt Newville via Tech-talk
Next: Re: EPICS release series after 7.0: 7.1 or 8.0? Ralph Lange via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
Navigate by Thread:
Prev: Re: EPICS release series after 7.0: 7.1 or 8.0? Johnson, Andrew N. via Tech-talk
Next: Re: EPICS release series after 7.0: 7.1 or 8.0? (ABI) Michael Davidsaver via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
ANJ, 09 Jan 2020 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·