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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII based on discussions with

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

TAKE AWAY: BIDIRECTIONAL PROGRAMS ARE AWESOME, AND YOU

SHOULD USE THEM.

Page 3: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

THE NORWEGIAN BLUE, INC.online pet shop.

Page 14: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

POODLECVE-2014-3566

Man-in-the-middle attack on SSLv3

Page 16: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

MULTIPLE SMALL MODELSN loops

Abstract layer

SSL

BX

MAPE

Python

BX

MAPE

access

BX

MAPE

Page 22: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

ASSIGNMENT: In small groups, find where

bidirectional programs could help you develop self-adaptive systems

Page 26: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

S

S’

V

V’

get

put

Page 27: BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

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 · BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII  based on discussions with

IMAGE CREDITS

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

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