28
BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII <[email protected]> based on discussions with Sebastian Uchitel (U. of Buenos Aires), Zhenjiang Hu (NII), Tao Zan (NII, SOKENDAI), Zirun Zhu (NII, SOKENDAI)

Bidirectional Programming for Self-adaptive Software

Embed Size (px)

Citation preview

Page 1: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE

Lionel Montrieux, NII <[email protected]>

based on discussions with Sebastian Uchitel (U. of Buenos Aires), Zhenjiang Hu (NII), Tao Zan (NII, SOKENDAI), Zirun Zhu (NII, SOKENDAI)

Page 2: Bidirectional Programming for Self-adaptive Software

TAKE AWAY: BIDIRECTIONAL PROGRAMS ARE AWESOME, AND YOU

SHOULD USE THEM.

Page 3: Bidirectional Programming for Self-adaptive Software

WHAT IS A BIDIRECTIONAL

TRANSFORMATION?

get :: Source -> View

put :: Source -> View -> Source

S

S’

V

V’

get

put

[BX]

Page 4: Bidirectional Programming for Self-adaptive Software

WHAT IS A WELL-BEHAVED

BIDIRECTIONAL TRANSFORMATION?

GetPut: put s (get s) = s

S

S

Vget

put

[BX]

Page 5: Bidirectional Programming for Self-adaptive Software

WHAT IS A WELL-BEHAVED

BIDIRECTIONAL TRANSFORMATION?

PutGet: get(put s v) = v

S

S’ V

put

get[BX]

Page 6: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIFLUX)• calendar • event (work) • name: Meeting • date: 9 April 2015, 15:00 • location: room 2005 • notes: prepare slides

• event (private) • name: Complaint • date: 9 April 2015, 17:00 • location: pet shop • notes: dead parrot

• calview • event (work) • name: Meeting • date: 9 April 2015, 15:00 • location: room 2005

[BiFluX, SACMAT]

Page 7: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIFLUX)UPDATE $event IN $source/event BY MATCH -> REPLACE $event/starttime WITH $starttime; REPLACE $event/endtime WITH $endtime; REPLACE $event/location WITH $location | UNMATCHV -> CREATE VALUE <event> <starttime/> <endtime/> <name/> <note>nothing</note> <location/> <private>False</private> </event> | UNMATCHS -> DELETE . FOR VIEW event[$starttime AS v:starttime, $endtime AS v:endtime, $name AS v:name, $location AS v:location] IN $view/* MATCHING SOURCE BY $event/name VIEW BY $name WHERE private/text() = 'False' [BiFluX, SACMAT]

Page 8: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIGUL)source DTD view DTDBiFluX update

BiFluX

BiGUL updatesource type view type

BiGUL

BX executable

Page 9: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIGUL - SRC)

type ApiCalls = [SCall] type SCall = (SPermissions, (File, (Line, (Protected, Deleted)))) type File = String type Line = Int type Deleted = Bool type Name = String type SPermissions = [SPermission] type SPermission = (Name, [ApiVersion]) type Protected = String type ApiVersion = String

Page 10: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIGUL - SRC)

type Calls = [VCall] type VCall = (File, (Line, VPermissions)) type VPermissions = [VPermission] type VPermission = Name

Page 11: Bidirectional Programming for Self-adaptive Software

BIDIRECTIONAL PROGRAMS (BIGUL - UPD)t :: MonadError' e m => ApiVersion -> BiGUL m ApiCalls Calls t ver = Align (\(ps, (f, (l, (ptd, del)))) -> return (not del)) (\(_, (f, (l, _))) (f', (l', _)) -> return (f == f' && l == l')) (Rearr (RVar `RProd` (RVar `RProd` RVar)) (EDir (DRight (DRight DVar)) `EProd` (EDir (DLeft DVar) `EProd` (EDir (DRight (DLeft DVar)) `EProd` (EConst () `EProd` EConst ())))) (Update (UVar (Align (\(_, vers) -> return (ver `elem` vers)) (\_ _ -> return True) (Rearr RVar (EDir DVar `EProd` EConst ()) (Update (UVar Replace `UProd` UVar Skip))) (\_ -> return ("", [ver])) (\_ -> return Nothing)) `UProd` (UVar Replace `UProd` (UVar Replace `UProd` (UVar Skip `UProd` UVar Skip)))))) (\_ -> return ([], ("", (0, ("", False))))) (\(ps, (f, (l, (ptd, del)))) -> return (Just (ps, (f, (l, (ptd, True))))))

Page 12: Bidirectional Programming for Self-adaptive Software

BP AND SELF-ADAPTATIONWhere it can help, and what challenges lie ahead

S

S’

V

V’

get

put

Page 13: Bidirectional Programming for Self-adaptive Software

THE NORWEGIAN BLUE, INC.online pet shop.

Page 14: Bidirectional Programming for Self-adaptive Software

APACHE WEB SERVER<VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/certs/resting.norwegianblue.com.pem SSLCertificateKeyFile /etc/ssl/private/resting.norwegianblue.com.key SSLProtocol TLSv1:TLSv1.1:TLSv1.2 SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!RC4:!aNULL:!eNULL:!LOW :3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!EXPORT:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA <Directory /var/www/norwegianblue> AllowOverride All </Directory> DocumentRoot /var/www/norwegianblue ServerName resting.norwegianblue.com </VirtualHost>

Page 15: Bidirectional Programming for Self-adaptive Software

POODLECVE-2014-3566

Man-in-the-middle attack on SSLv3

Page 16: Bidirectional Programming for Self-adaptive Software

SELF-ADAPTATIONKeeping the configuration secure

M A P E

Apache configuration (.conf)CVE DB service apache2 reload

Page 17: Bidirectional Programming for Self-adaptive Software

NGINX SERVERserver { listen 443 ssl; server_name stunned.norwegianblue.com;

ssl_certificate /etc/ssl/certs/stunned.norwegianblue.com.pem; ssl_certificate_key /etc/ssl/private/stunned.norwegianblue.com.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !EXPORT !aECDH !EDH-DSS-DES-CBC3-SHA !EDH-RSA-DES-CBC3-SHA !KRB5-DES-CBC3-SHA";

ssl_dhparam /etc/ssl/dhparams.pem;

# Path to the root of your installation root /var/www/norwegianblue/; # set max upload size client_max_body_size 10G; fastcgi_buffers 64 4K;

location = /robots.txt { allow all; log_not_found off; access_log off; }

location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ deny all; } }

Page 18: Bidirectional Programming for Self-adaptive Software

AN ABSTRACT LAYERBidirectional programming for abstraction and migration

Apache conf Nginx confCVE DB service mgr

Abstract model

M A P E

BXBX

Page 19: Bidirectional Programming for Self-adaptive Software

A SMALL MODEL IS A GOOD MODELBidirectional programming to the rescue, again

Abstract layer

M A P E

Abstract SSL layer

BX

Page 20: Bidirectional Programming for Self-adaptive Software

THE SMALLER THE BETTERModel size may vary at runtime

Abstract layer

M A P E

Abstract SSL layer

BX

Page 21: Bidirectional Programming for Self-adaptive Software

MULTIPLE SMALL MODELSN loops

Abstract layer

SSL

BX

MAPE

Python

BX

MAPE

access

BX

MAPE

Page 22: Bidirectional Programming for Self-adaptive Software

SYNCHRONISATIONStraightforward, with bidirectional transformations

Abstract layer

SSL

BX

MAPE

Python

BX

MAPE

access

BX

MAPE

Python’

Abstract layer’

access’

Page 23: Bidirectional Programming for Self-adaptive Software

BEYOND SELF-CONFIGURATIONcurrent system vs. desired system

Concrete layer

System

Abstract layer

current state desired stateAWS APIAWS API

BX

Page 24: Bidirectional Programming for Self-adaptive Software

DELTABidirectional programs to the rescue, once more!

AWS APIAWS API

BX

Abstract layer

System

Concrete layer

current state

current state

current state

desired state

current state + delta

current state

current state

Page 25: Bidirectional Programming for Self-adaptive Software

ASSIGNMENT: In small groups, find where

bidirectional programs could help you develop self-adaptive systems

Page 26: Bidirectional Programming for Self-adaptive Software

S

S’

V

V’

get

put

Page 27: Bidirectional Programming for Self-adaptive Software

REFERENCES

• [BiFluX]: H. Pacheco, T. Zan, and Z. Hu, “BiFluX: A Bidirectional Functional Update Language for XML,” in 6th International Symposium on Principles and Practice of Declarative Programming (PPDP 2014), 2014.

• [BX]: S. Fischer, Z. Hu, and H. Pacheco, “ ‘Putback’ is the Essence of Bidirectional Programming,” National Institute of Informatics, GRACE-TR 2012-08, Dec. 2012.

• [SACMAT]: L. Montrieux and Z. Hu, “Towards Attribute-Based Authorisation for Bidirectional Programming,” 2015, pp. 185–196.

Page 28: Bidirectional Programming for Self-adaptive Software

IMAGE CREDITS

• Poodle by Marcia O’Connor CC-by-nc 2.0

• Python parrot 3 by TaylorHerring CC-by-nc-nd 2.0